質問: PHPでフォームからデータを受け取り保存するプログラムを書いています。 XSSとか気にしながら書いています。 データベースへの接続はPDOでやっています。 htmlspecialcharsは、データベースに保存したデータを表示する時に利用することはわかりました。 ただ、わからない事は、フォームのテキストボックスに一度保存したものを呼び出し初期値としてvalueにセットしています。そして、必要に応じてそのフォームの内容を変更して保存します。 この時、テキストボックスにはhtmlspecialcharsにて変換された文字列が表示されていると思います。例えば&ampです。 これを再度保存するときは特に何もしなくてもセキュリティ的には問題ないのでしょうか。 それとも保存する前にはhtmlspecialchars_decodeで変換を戻してから保存し、表示する時にまたhtmlspecialcharsにて変換するべきなのでしょうか。 なお、htmlspecialcharsを利用するときにはENT_QUOTESをオプションで指定しています。 それから、文字コードはUTF8を使っており、プリペアドステートメントを使ってSQLを構築しています。
回答: > テキストボックスにはhtmlspecialcharsにて変換された文字列が表示されていると思います。例えば&ampです。 > > valueに&ampを入れるとテキストボックスには&と表示されます 簡単な例を作りましたので確認してみてください ``` ``` > 再度保存するときは特に何もしなくてもセキュリティ的には問題ないのでしょうか > > クライアントで何が行われているかはわからないのでバリデーションは常に必要です > 保存する前にはhtmlspecialchars_decodeで変換を戻してから保存し、表示する時にまたhtmlspecialcharsにて変換するべきなのでしょうか > > valueに&ampを入れるとテキストボックスには&と表示されて&が送信されます <>’”なども同様です 上に書いたフォームをsubmitしてみるとアドレス欄に結果が現れるので確認してみてください 保存前のhtmlspecialchars_decodeは不要で、表示する時にまたhtmlspecialcharsが必要なことがわかるはずです