XSS対策にならないというわけではなく
セキュリティ関連でたまたま目にとまったので。
この記事では「入力時に $_GET や $_POST を htmlspecialchars によって実体参照に変換する方法が、XSS対策によい」と主張されていますが、通常このような手法は避けたほうがいいものだと思います。
理由はXSS対策にならないからというものではなく、コーディングを進めていく上で混乱を招きやすいからです。
たとえば $_GET や $_POST に与えられた入力値を何かと比較する際や、$_GET や $_POST の入力値に < や > が含まれているかどうかを調べる必要が出てきたとき、もし上記のような方法をとっていると、
- < は < に変換されている
< は &lt; に変換されている
(※追記: 2番目は間違いでした。コメントありがとうございます。)
ということを常に意識してコーディングする必要が生じるためです。
それよりは、プログラム内部では < と入力されたものは < として扱え、< と入力されたものは < として扱えるほうがめんどくさくなく、余計なバグを発生させる可能性も減らすことができるのではないかと思います。
はじめまして。to-Rの西畑です。
blogいつも拝見さしてもらっています。
言及ありがとうございます。
本文中に「GETやPOSTで受け取る値の性質が変わるので、すべてのプログラムで冒頭に入れれば動作するという魔法のコードではない」と書いたのが、入力値のデータを利用するようなプログラムには利用できないという意図もあったのですが、わかりにくかったですね。追記しておきましました。
あと、< は &lt;に変換されるとありますがこれは間違いで、htmlspecialchars_decodeを一度通していますので<は<のままです。(だから「<」と区別ができないというわけですが) よろしかったら、ここだけ訂正いただけたらと。
> 西畑さん
htmlspecialchars_decodeが効いてるんですね。
コード書いて先に確かめておくべきでした。
ご指摘ありがとうございます。
< は < に変換される
< は < のまま
という結果でしたので修正しました。