エセプログラマーの戯言

プログラムやリナックスなどについてのメモです

全体表示

[ リスト ]

PHP XSS対策2

PHPのセキュリティについて調べていたら、このような論争を発見しました!


この「PHPサイバーテロの技法―攻撃と防御の実際」という本は自分もずいぶん参考にしましたが、このような論争があったのをはじめて知りました。

さて、自分はといいますと、XSS対策に関して、この「プログラミング解説書籍の脆弱性をどうするか」への反論のようなもの2]に書いてある

文字列定数は、明らかにhtmlspecialchars()をかける必要のないものです。「無駄だから」とか、そういう発想じゃありません。そこに、攻撃の入る余地がないことも重要ですが、HTMLとしての要素を期待されることが極めて多いからです。

例えば、ある文字列定数にコピーライトマークを入れたい、となった場合にどうしましょうか。その都度、htmlspecialchars()を消すんですか? htmlout() となっている部分を、htmlout_tag()に書き換えるのですか?そういう場当たり的な対応こそ、「脆弱性を生み出す諸悪の根元」です。まったくもって正しいプログラミングスタイルではありません。

この部分をやらかしたことがあります(笑)
僕は、に紹介したように配列を一括でhtmlspecialchars()処理をする関数を使っているのですが、この時は楽をしたいがためにPHP内の変数を全て配列で表現し、出力直前で全て一括でhtmlspecialchars()をかけたんです。
ちなみに自分は処理の部分と表示の部分を完全に分けてて、処理→サニタイズ→表示って感じです。
見事に、文字列定数に<br />などのタグが含まれていて、全てエスケープされてしまい、HTMLタグが必要な変数のみに必要なタグを変換しなおすという面倒なことをしなければならなくなりました(笑)

でも、これはこれで、セキュリティ的には良いのかなぁ〜とも思ってます。
全て一括でhtmlspecialchars()をかけるため、かけすぎもかけ忘れもないし、HTMLタグを許可する変数もタグの種類もちゃんと把握できると思います。

しかし、全て配列にしてしまえ!っていうのは見たことないのですが、何かとんでもないデメリットがあるからなのでしょうか??
個人的には、文字コードの変更やSQLインジェクション対策などいろいろなことが一括で出来て、すごく便利な気がするんですが・・・・・・
意見などありましたらよろしくお願いします。

この記事に

閉じる コメント(0)

コメント投稿

顔アイコン

顔アイコン・表示画像の選択

名前パスワードブログ
絵文字
×
  • オリジナル
  • SoftBank1
  • SoftBank2
  • SoftBank3
  • SoftBank4
  • docomo1
  • docomo2
  • au1
  • au2
  • au3
  • au4
投稿

.


みんなの更新記事