Re:htmlspecialcharsに関する残念なお知らせ
<追記 date="2009/10/10">
岩本さんはレポートを2つ上げていたのだが
http://bugs.php.net/bug.php?id=49785
http://bugs.php.net/bug.php?id=49814
1つ目の方で対応してもらえたようです。よかった。追記>
私はPHPはぜんぜん詳しくないし、OSSへのバグレポートの経験は1回しかないので、はずしているかもしれない。
htmlspecialcharsに関する残念なお知らせ - 岩本隆史の日記帳(アーカイブ)
外国語ならなおさら、できる限りのことをしないと伝わらない – 秋元
こんな感じの内容だったらよかったのかな?せっかくいろんな人が検証したりしてたのに無視されるのももったいない。
PHPのhtmlspecialchars関数について、UTF-8以外の文字エンコーディングでは妥当性チェックが不充分であり、場合によってはXSS攻撃が可能になる。
挙動
PHP5.2.5以降、UTF-8において部分的なマルチバイト・シーケンスを受け付けないような変更が入った。
期待する動作
修正すべき理由
- 多くの国で、UTF-8以外のマルチバイトエンコーディングが広く用いられている。
- htmlspecialcharsの挙動がUTF-8とそれ以外のマルチバイトエンコーディングとで変わるべきではない。
- htmlspecialcharsが不正なマルチバイト・シーケンスを受け付けないことを期待してコーディングしたが、実際には不正なシーケンスが通過してしまう場合、XSSの原因となりえる。
- Mozilla Firefox 3.5.3 と Internet Explorer 8を含む一部のブラウザは、Shift_JISエンコーディングにおいて\xf0 の後ろにある "(ダブルクォート) が有効にならないため。(XSS再現コードを添付)
- なお、このレポートは#43896とは正反対の意見である。すなわち、不正シーケンスであれば必ず出力を空に「するべし」という意味である。
提案パッチ
(コードを添付)