質問: htmlspecialchars_decode($name, ENT_QUOTES) 7 <?php echo $name; ?>でブラウザで表示 8 アラート表示はなくなり、「<script>alert(1)</script>」という文字列が表示された 【ご教授頂きたいこと】 ・上記はエンコードした後にデコードして表示していますが、そもそもこのやり方でXSS対策になっているのでしょうか。結果だけを見るとアラートは表示されず(javascriptは機能せず)、かつ表示も意図した通りになっていますが、「たまたまうまくいっているだけ」や「別の方法で攻撃されたときに対処できない」などがございましたらご指摘頂ければ幸いです。 ・上記のような「エンコード⇒デコード」をする以外の方法がございましたら教えて頂けますと幸いです。 ※テストの方法が拙いため、「なんでこんなやり方しているのか?」などの疑問がありましたらそちらもご指摘頂ければ説明致します。 以上です。宜しくお願い致します。
回答: XSS対策は基本的に「画面出力時・表示時に」行うものです。 DBにはそのまま``を登録して表示時にhtmlspecialchars()を行ってください。 htmlspecialchars()はあくまで「HTMLエスケープ」を行うものです。 SQLインジェクション対策で使うものではありません。