奇特なブログ

「殊勝に値する行いや心掛け」を意味する、奇特な人になる為のブログです

XSSとクリックジャッキングについて一言

PHPカンファレンス2011にて、徳丸浩さんの講演を聞いてきたのですが、
タイトルの内容の部分について、筆者が感じた事を書きたいと思います。
あ、別に内容がダメだったという事ではありません、念の為。

まず、XSS対策として使われる、htmlspecialchars関数の第「2」引数について。
属性値内に書く場合は、

ダブルクオートで囲った属性値は、ENT_COMPATかENT_QUOTES、
シングルクォートで囲った属性値はENT_QUOTES、
属性値はダブルクォートで囲むことにすれば、ENT_COMPATで統一してもOK
ということで、筆者も同じ意見です。
以下の様なコードがあって、$valが「' onMouseOver=alert(document.cookie); 」だったら、
XSSが成立してしまいますし。

<input type='text' name='id' value='<php echo htmlspecialchars($val, ENT_COMPAT, "UTF-8"); ?>' />

ただ、「X」HTMLでも、HTMLでも、
要素値をダブルクオートやシングルクォートで囲まなくても、
「ぶっちゃけ動く」んですよねえ(苦笑)
無論、ダブルクオートやシングルクォートで囲んでも動くと。
で、これは、
「書く人が悪い(ちなみに筆者は、属性値は"多分必ず"ダブルクオートで囲む派)」で終わりなんですが、
「現場の実態」を考えると、
「一応、ENT_QUOTESで囲んでおこうかな」って、筆者は考えてしまいました(苦笑)

次に、クリックジャッキングについて。
まあ、こっちは徳丸さんご本人と少しお話したのですが。
現在、夜中(苦笑)だし、筆者も大して詳しくないのでサラッと書くと。
Firefox3.0など、2011年9月現在では古いバージョンのブラウザ(他の該当ブラウザは不明)において、
frameかiframeを使った画面では、クリックジャッキングを「防げない」という。
新しいバージョンのブラウザでは、上記のリンク先に書いてある通りという事だったんですけどね。
で、まあこれも「古いブラウザ使っている方が悪い」という、
XSSと同じ様な話ではあるんですけど、
こっちは開発者ではなくユーザーですからね。
だからもう、筆者的には「frameとiframeを使わずに代替案を検討する」で良いのではないかという。
あ、筆者はやってないし、よく知りませんが、
Facebookでiframeがガンガン使われているのはどうなのでしょうね。

あと、パスワードの保存も悩ましい感じだったのですが、
これは、筆者では対抗出来なさそうなので、
他の優秀な技術者さん達にバトンタッチw
鍵を「捨てる」とか、ボソッと言ってましたけどね。