F.Ko-Jiの「一秒後は未来」

XSS対策にならないというわけではなく

セキュリティ関連でたまたま目にとまったので。

» XSSの脆弱性を限りなくなくす方法[to-R]

この記事では「入力時に $_GET や $_POST を htmlspecialchars によって実体参照に変換する方法が、XSS対策によい」と主張されていますが、通常このような手法は避けたほうがいいものだと思います。

理由はXSS対策にならないからというものではなく、コーディングを進めていく上で混乱を招きやすいからです。

たとえば $_GET や $_POST に与えられた入力値を何かと比較する際や、$_GET や $_POST の入力値に < や > が含まれているかどうかを調べる必要が出てきたとき、もし上記のような方法をとっていると、

  • < は &lt; に変換されている
  • &lt; は &amp;lt; に変換されている

(※追記: 2番目は間違いでした。コメントありがとうございます。)

ということを常に意識してコーディングする必要が生じるためです。

それよりは、プログラム内部では < と入力されたものは < として扱え、&lt; と入力されたものは &lt; として扱えるほうがめんどくさくなく、余計なバグを発生させる可能性も減らすことができるのではないかと思います。

  1. 西畑一馬 より:

    はじめまして。to-Rの西畑です。

    blogいつも拝見さしてもらっています。

    言及ありがとうございます。

    本文中に「GETやPOSTで受け取る値の性質が変わるので、すべてのプログラムで冒頭に入れれば動作するという魔法のコードではない」と書いたのが、入力値のデータを利用するようなプログラムには利用できないという意図もあったのですが、わかりにくかったですね。追記しておきましました。

    あと、&lt; は &amp;lt;に変換されるとありますがこれは間違いで、htmlspecialchars_decodeを一度通していますので&lt;は&lt;のままです。(だから「<」と区別ができないというわけですが) よろしかったら、ここだけ訂正いただけたらと。

  2. F.Ko-Ji より:

    > 西畑さん
    htmlspecialchars_decodeが効いてるんですね。
    コード書いて先に確かめておくべきでした。
    ご指摘ありがとうございます。

    < は &lt; に変換される
    &lt; は &lt; のまま

    という結果でしたので修正しました。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

著者について

fkoji

F.Ko-Ji

Webエンジニアやってます。最近は ドットインストール の開発がお仕事です。その傍ら、個人で Meity電車遅延なう梅酒.in#グラドル自画撮り部 の部室といったネットサービスを開発・運営してます。梅酒と草野球とリアル脱出ゲームが好きです。

» 詳しいプロフィールや運営サービスの一覧など