2009-05-24 15 views
2

私はユーザーが入力を提供できるこのUTF-8エンコードされたHTMLページを作成しています。私はこのXSS証明をしたかったのです。 Prototypeという無料のJavascriptフレームワークがいくつかの便利な機能を提供しています。 1つの特定の関数stripTagsは、基本的に入力文字列からすべてのタグを取り除きます。 次の入力処理によってXSSが防止されますか?String.stipTags()はXSS攻撃を緩和するのに十分ですか?

  1. (すべての可能なUTF-8表現を考慮して)入力の徹底したUTF-8デコードデコードされた上で
  2. 実行stripTagsを文字になるように
  3. 変換HTML文字エンティティを実行するには、すべての可能なタグを削除した文字列を変換します

JavascriptでのantiXSS試行の一般的なコメントの1つは、ユーザーがシステムをバイパスできることです。これはどのように可能ですか?私の場合、システムを使用するユーザーは信頼できます。しかし、以前に同じマシンを使用していた可能性がある他のユーザーは、悪意のあるユーザーになる可能性があります。

答えて

3

あなたが唯一変更する必要があります:"から<

  • "&
  • <

    • &(あなたは属性に単一引用符を使用する場合、また'&#39;へ)

    既に特殊なHTMLの文字をエスケープした俳優、そこにタグがなく、ストリップタグは何もしません。

    あなたがストリップタグを使用する場合はエスケープの代わりにが、その後、外国の入力は例えば、HTML属性を逃れることができるようになります:

    " src="404" onerror="evil() 
    

    そして、あなたがしたい場合:$foo

    <input value="$foo"> 
    

    ある場合信頼できないコンテンツをJavaScript(<script>)に挿入するには、他のルールが適用されます。

    • HTMLエンティティは<script>で解釈されないため、エスケープには使用しないでください。
    • JavaScriptのルールをエスケープ文字列(→\\\、→\""<\/</のすべての回出てくる置き換える使用。あなたはそれを実行している場合には
  • 0

    javascriptのフレームワークは入力が提供されているマシン上で実行されている場合、これは(あなたが悪意のあるクライアントからのコンテンツを信頼されるだろう確保されていません。

    クライアントマシンはデータを表示する直前に、あなたのコードに含まれる他の脆弱性に依存します。

    セキュリティの制約は、通常、ユーザーが単に移動することができないサーバー側で適用されるということです。私が覚えていることから、PHPにはストリップタグ機能があり、ApachesのStringEscapeUtilsにも同様の機能があります。私はそこに何か似ていると確信しています。

    関連する問題