[PHP-users 8353] Re: 簡易クロスサイトスクリプティング対策スクリプト

Yasuo Ohgaki php-users@php.gr.jp
Mon, 01 Jul 2002 10:50:33 +0900


大垣です。

Masaru Matsunami wrote:
> 松並と申します。
> 
> Sat, 29 Jun 2002 14:26:40 +0900 頃に
> Yasuo Ohgaki <yohgaki@ohgaki.net> さん wrote:
> 
> 
>>最後に、根本的なクロスサイトスクリプティング対策はコード本体の脆弱性
>>を修正する必要があります。このスクリプトを使っているから安全と言う事
>>はありません。残っている危険性はstoryid 33にコメントしますが、コード
>>を読まないとなんとも言えません、、
>>
>>手っ取り早く書いたスクリプトなので抜けがあるかも知れません。ご指摘、
>>よろしくお願いします。
> 
> 
> 大垣さん作成のスクリプトはPHPへの入力部分に着目して
> 入力値チェックするものですよね。
> 効果は大きいといえますが、もちろん完璧ではありません。

その通りです。脆弱性が発見されすぐに対応できないが、もっとも
危険なアタックにとにかく早く対応したい、と言う場合だけ有効で
す。

その後、*早急にコードを修正*しなければなりません。

> 
> 大垣さんも言及されていますが、結局はHTMLページを作り出すPHPコードを
> 修正する必要があります。
> 
> 本質的には「HTMLページを生成するプログラム」部分で、
> 外部から与えられる文字列を「そのまま出力」してしまうことが問題です。
> 
> よく < や > といった文字を検出したり、エスケープすればオーケーと
> 聞きますが、HTML中の文脈によっては、クロスサイトスクリプティング脆弱性
> につながることがあります。
> わたしがまとめた情報がこちらにあります。

ご指摘の通り、単純に< >を検出/エスケープすればOKと言うもの
ではありません。< >を検出/エスケープすれば大方OKですが、、、

# ご存知の方も多いと思いますが、現在、クロスサイトスクリプ
# ティングを防止するフォームモジュールを作っています。
# このモジュールを使って処理を完結させると安全に処理でき
# るようになります。しかし、PostgreSQL Conference講演
# 中にも触れたように、他のシステムとデータをやりとりする場
# 合は脆弱な部分ができてしまう事があります。

ついでに他の危険性についても少し、言及しておきます。

コードを見て頂くと判ると思いますが、ユーザーが入力した情報を
再度掲載するタイプのWebページがある場合は、クロスサイトスク
リプティング以外にWebブラウザ/アプリケーションのセキュリティー
ホールを利用したアタックの踏台にされないようにしなければな
りません。

公開したスクリプトでは<bgsound>などの危険なタグもチェック
しています。これらの危険なタグを出力してしまうと、ウィルス
を配布する際にWebサイトが利用されてしまう(踏台にされる)
などの危険性があります。

掲示版等を含むWebサイトはクロスサイトスクリプティングはもち
ろんこの危険性について十分注意してコーディングする必要があ
ります。

# このリストを購読されているほとんどの方は既にこの危険性を
# 十分認識されているとは思います。

# Webページのコメントに記載している通り、掲載したスクリ
# プトでは踏台にされる危険性を排除できません。当然ですが、
# クロスサイトスクリプティングアタックをするコードを保存
# する事もできます。念の為。

もし、この危険性を認識されずにプログラムを作成されている
場合、もう一度コードを見直す事を強くお奨めします。

> 「クロスサイトスクリプティング」
> http://www.ipa.go.jp/security/awareness/vendor/programming/a01_02.html
> 

参考にさせて頂きます。

> 
> ※個人的には機能優先で拡張しすぎたHTML/JavaScriptなどに
>  クロスサイトスクリプティング問題の原因があると恨んでます。

クロスサイトスクリプティングは古くて新しい問題ですね。新しい
Webプログラマが生まれるたびに、問題を含むWebサイトができそう
です、、、

# printe(): 危険なタグを削除、またはエスケープして出力する
# 関数。のようなものがあれば便利かも知れませんが、magic_quote
# の様にこれを使えば安全、と勘違いされるのも困りますし、、
# どうでしょうか?

ブラウザ、ヘルパーアプリケーション開発者にはセキュリティーホー
ルを修正するだけでなく、少なくとも悪意のあるコード、ファイル、
データがWebサイトから送られてきた場合、注意/警告するくらいの
事はやって欲しいですね。(私が知らないだけで実は警告する場合が
多い?)

--
Yasuo Ohgaki