PHP_SELFにはXSS脆弱性があるから使うなと?

最近仕事でPHPを使っている。動的サイトの作成環境としてデフォルトで一通りの道具が揃っているので導入しやすく多くのWEB制作会社が採用しているのも解る。

ただやはり言語としてイマイチな点があるのは否めない。こちら PHPの言語仕様がウンコな理由個人的トップ10 - kwatchの日記 に書かれている内容がほぼすべて自分が不満に思った事と重なっていた。やはりPHPに対して似たような不満を持っている人は多いのだろう。

ところで調べモノをしていて、サーバ変数 $_SERVER["PHP_SELF"] にはXSS脆弱性があるので $_SERVER["SCRIPT_NAME"] で代用する、あるいは、これを使う時はエスケープしようという記述を見かけた。

http://itpro.nikkeibp.co.jp/article/COLUMN/20070227/263356/

間違っていないが「出力する変数は全てエスケープしろ」が正解だろう。「PHP_SELF == 脆弱性がある」と一対一で覚えてしまうと、全ての環境変数に対してこれはOK、これはダメと覚えなくてはならず学習コストが高すぎる。すべてエスケープするという原則ならば、いちいち覚える必要がない。また、安全と思われていたものに脆弱性あった、という場合でも慌てる必要はない。

原則に従えばXSSをほぼ気にする必要はなくなる。例外としてタグを出力する必要がある時だけ十分に注意し、対策すればいい。