ENT_QUOTES脳?
builder編集部の大野です。初出時、2ページ目最下のソースコードにおいて、htmlspecialchars($_REQUEST ['my_name'])となっていましたが、特別な理由がない限りhtmlspecialchars($_REQUEST['my_name'], ENT_QUOTES)とすべきなので、第2引数を追加しました。(強調は引用者)
Webデザイナが知っておくべきPHPセキュリティ - builder by ZDNet Japan
htmlspecialchars() の間違った使い方。いい加減にしてほしい。 / 正しい使い方 → http://blog.ohgaki.net/htmlentitiesa_raspa_a_afia_a_s / 修正された。(強調は引用者)
はてなブックマーク - heavenshellのブックマーク / 2008年4月10日
問題のソースコードはこれ。
main.php
Webデザイナが知っておくべきPHPセキュリティ - builder by ZDNet Japan
こんにちは。<?php echo htmlspecialchars($_REQUEST['my_name'], ENT_QUOTES); ?>さん
「こんにちは」から始まる1行のみmain.phpに書かれているということだろう。
このコード、htmlspecialcharsの第2引数が「ENT_QUOTES」でなかったらどんな問題があるというのか。私にはまったく分からない。
「いや、問題がある」という方は、高木浩光さんの下記記事も批判してみてはどうか。
タグの属性部分を出力するときは次のように書く。
htmlout('日時文字列を入力してください。'); htmlout_tag('<form>'); htmlout_tag('<input type="text" name="strdate" value='); htmlout_quote($strdate); htmlout_tag('>');使用した関数の定義はたとえばこんな感じだ。
function htmlout($str) { echo htmlspecialchars($str, ENT_NOQUOTES); } function htmlout_quote($str) { echo '"' . htmlspecialchars($str) . '"'; } function htmlout_tag($str) { echo $str; }「サニタイズ言うなキャンペーン」とは何か
返す刀でバッサリ斬られる覚悟があればどうぞ。
追記(2008-04-12)
あと何故 ENT_QUOTES を書かなくても問題ないと思われたのか是非教えて頂きたいです。
Re:ENT_QUOTES脳? - Memo
ずるい言い方ですが「問題ない」とは書いていません。「問題があるとされる理由が分からない」と書いたのです。
main.phpにおいて「'」が「'」に変換されないことでXSSの危険性が増すというなら、ぜひ攻撃例を教えていただきたい。