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

Yasuo Ohgaki php-users@php.gr.jp
Tue, 02 Jul 2002 08:26:29 +0900


大垣です。

Masaru Matsunami wrote:
>># printe(): 危険なタグを削除、またはエスケープして出力する
>># 関数。のようなものがあれば便利かも知れませんが、magic_quote
>># の様にこれを使えば安全、と勘違いされるのも困りますし、、
>># どうでしょうか?
> 
> 
> HTML中の文脈に依存して、適切なエスケープ方法が異なりますので、
> 単純にエスケープするのでは回避されてしまうこともあります。
> HTML中の文脈に応じて printe のバージョンが揃っていればよいですが、
> バージョンの使い分けをプログラマが分かっていなければならず、
> これもやはりプログラマにスキルを求めてしまいます。

単純に
print('prefix '.htmlentities($message).' postfix');
print('prefix '.strip_tags($messages).' postfix');
より
printe("prefix $message postfix", ESCAPE_ENTITIES);
printe("prefix $message postfix", STRIP_TAGS);
の方が書き安いとくらいでメリットはあまりないかもしれませんね。

> 
> HTML文脈に応じて適切なエスケープをしてくれるHTMLテンプレートクラス
> ってのがあればなぁ、作りたいなぁ、でもHTMLをパースするって大変だよねぇ
> などと、1年前くらいから思ってはいます。思うだけですが。

スピードが一番の問題と思います。

Cで実装してもかなり遅くなりそうな気がしますが、URL Rewriterを
拡張してうまく使えば、そこそこのパフォーマンスで動作するかもしれ
ません。

> 
> 
> ちょっとそれますが、「HTMLタグ」をユーザ入力として許可している
> Webアプリケーションがありますが、
> 危険なタグを検知し取り去ることは非常に難しいと思います。
> ブラウザは機能優先で拡張されますので、(ちょっと偏見)
> 知らぬ間に危険なタグが増えている可能性があります。
> またブラウザのバグで通常のタグが危険タグになるかもしれません。
> 「HTMLタグ」入力をWebアプリ仕様から排除することを検討すべきだと思います。
> 

個人的には危険なタグを削除ではなく安全なタグのみ許可、という方針で
作成していればほぼ安全(多くのサイトで利用可)と思います。

# HTML関連規格が複雑化している今、どこに危ないバグ
# 含まれても不思議ではないと思いますが、、
# サイトがどこまでのリスクを受け入れるか、という事
# 考慮して決めれば良いと思います。

> 
> 
>>ブラウザ、ヘルパーアプリケーション開発者にはセキュリティーホー
>>ルを修正するだけでなく、少なくとも悪意のあるコード、ファイル、
>>データがWebサイトから送られてきた場合、注意/警告するくらいの
>>事はやって欲しいですね。(私が知らないだけで実は警告する場合が
>>多い?)
> 
> 
> どのスクリプトが危険で、どのスクリプトは安全か、
> というのは、ブラウザにとって判断が難しいと思います。
> もちろん、人間にとっても難しいのですが・・・
> もしかして、よい判断方法ってありますか?

JavaScriptの事は考えてませんでした。例えば、MediaPlayerの
バグにより音を鳴らす設定にしていると任意のコードが実行できるな
どの場合、アプリケーション側で攻撃を目的としたデータかどうか判
断できると思います。

Securityパッチを作成されている方からすると”時間がないのにそ
こまではできない”となると思いますが、次のバージョンアップの際
に実装する、という事は可能と思います。

# 作る方からするとこれは面倒なんですよね、、、

--
Yasuo Ohgaki