XSSとか気にしながら書いています。
データベースへの接続はPDOでやっています。
htmlspecialcharsは、データベースに保存したデータを表示する時に利用することはわかりました。
ただ、わからない事は、フォームのテキストボックスに一度保存したものを呼び出し初期値としてvalueにセットしています。そして、必要に応じてそのフォームの内容を変更して保存します。
この時、テキストボックスにはhtmlspecialcharsにて変換された文字列が表示されていると思います。例えば&ampです。
これを再度保存するときは特に何もしなくてもセキュリティ的には問題ないのでしょうか。
それとも保存する前にはhtmlspecialchars_decodeで変換を戻してから保存し、表示する時にまたhtmlspecialcharsにて変換するべきなのでしょうか。
なお、htmlspecialcharsを利用するときにはENT_QUOTESをオプションで指定しています。
それから、文字コードはUTF8を使っており、プリペアドステートメントを使ってSQLを構築しています。
テキストボックスにはhtmlspecialcharsにて変換された文字列が表示されていると思います。例えば&ampです。
valueに&ampを入れるとテキストボックスには&と表示されます
簡単な例を作りましたので確認してみてください
<html> <body> <form method="get"> <input type="text" name="input1" size="30" value="<a>"><br /> <input type="text" name="input2" size="30" value="&"><br /> <input type="submit" /> </form> </body> </html>
再度保存するときは特に何もしなくてもセキュリティ的には問題ないのでしょうか
クライアントで何が行われているかはわからないのでバリデーションは常に必要です
保存する前にはhtmlspecialchars_decodeで変換を戻してから保存し、表示する時にまたhtmlspecialcharsにて変換するべきなのでしょうか
valueに&ampを入れるとテキストボックスには&と表示されて&が送信されます
<>’”なども同様です
上に書いたフォームをsubmitしてみるとアドレス欄に結果が現れるので確認してみてください
保存前のhtmlspecialchars_decodeは不要で、表示する時にまたhtmlspecialcharsが必要なことがわかるはずです
ありがとうございます。
2013/09/12 09:52:15追加でおしえてください。
保存前のhtmlspecialchars_decodeは不要とのことですが、逆にどのような場合にhtmlspecialchars_decodeは使えばよいのですか?
逆も何もありません
2013/09/15 09:21:31今回の話では不要だから不要ただそれだけです
今回は関係の無かったhtmlspecialchars_decodeですがHTMLファイルを直接読み込んで処理するといった場面で必要になってきますので存在は覚えておくと良いですね