2016-08-04 5 views
1

私は、次のフローがあります。クエリパラメータ付きURL、サーバー側でいくつかのロジックを実行し、その後、XSS JSコードファイルに渡されたパラメータのための防止

    でテンプレートエンジンにスタブHTMLページを使用して生成
  • javascriptファイルが含まれています。これはメインロジックです。
  • <script>このJSコードのパラメータを持つJSオブジェクトを含むタグで、部分的に以前のクエリパラメータから取得されたタグです。

ここで、XSS注入を防ぐために、受け取ったパラメータをサニタイズします。問題は、そこにパラメータの1つがトークンなので、私はバリデーションに厳格すぎる(すべての可能なXSS文字があまりにも厳しくないのを許さない)ことを望んでいないが、私が扱っているほとんどのライブラリ純粋なHTMLであり、JSコードではありません(<script>タグ内)。私は、セキュリティを扱うとき(ユニットテストと正規表現の束ではない)、オープンソースライブラリを信頼するために使用されているので、私はすべての正規表現ソリューションを読むと少し不安を感じる。

ライブラリに関するアドバイス&可能なアプローチ?私たちはJVM環境で動作します。

+0

私はあなたのクエリ文字列パラメータをhtmlでエンコードして、あなたのhtmlレスポンスページに安全に表示できると思います。 javaではorg.apache.commons.lang.StringEscapeUtilsを使用することができます –

+0

JSオブジェクトのプロパティの値としてURLパラメータを渡していますが、それは正しいですか? – mjsarfatti

+0

@mjsarfattiそうです。 –

答えて

2

最も簡単で簡単な、より安全な方法は、data attributesを使用して、ユーザーが入力した動的な値を表すことです。

この方法では、HTMLエンコーディングについて心配するだけで、複雑な16進エンティティのエンコーディング(\x00)はありません。OWASP recommendです。

たとえば、あなたが持っている可能性があり:@param.token意志出力HTMLは、クエリ文字列パラメータのバージョンをエンコード

<body data-token="@param.token" /> 

。例えばpage?token=xyz"は出力

<body data-token="xyz&quot;" /> 

これはあなたのXSSの脆弱性の懸念を緩和しますでしょう。

var token = $("body").data("token"); 

シンプルかつセキュア:

次に、あなたがJQuery to easy retrieve the data attribute values in your JavaScriptのようなものを使用することができます。

+0

OP、ifあなたは ''( 'foo '')' 'html(token)'で終わっているか、または ''すべてのクライアント側のJavaScriptの使用のために魔法のように安全ではありません。無数の安全でないメソッドのうち、最初に反映されたXSSの問題ではなくDOMベースのXSSの問題に脆弱になります。 – coastalhacking

1

あなたのような、文字列としてあなたのパラメータを割り当てる想像:

{ 
    ... 
    x: '[PARAMETER]' 
} 

あなたはは[PARAMETER]は引用符で囲まれた文字列の外に壊れないことを確認します。

この場合、エスケープする必要があるのは、'文字と閉じる</script>タグです。注意:攻撃者が\'という文字列を送信し、\\'という名前でエスケープされ、'に戻ってきた(そして、あなたが元の場所から戻ってきた)「エスケープエスケープ」攻撃を考慮してください。

それは\ xHH形式で

エスケープすべての文字未満256

に私はXSSの攻撃にOWASPのページを読むためにあなたを招待し、OWASPのノートとして、一般的に単により安全だ、とhttps://www.owasp.org/index.php/XSS_%28Cross_Site_Scripting%29_Prevention_Cheat_Sheet#RULE_.233_-_JavaScript_Escape_Before_Inserting_Untrusted_Data_into_JavaScript_Data_Values

+1

このアプローチは残念ながら、攻撃者がスクリプトタグから脱出するために「」を渡すと脆弱です。その後、攻撃者はその文字列に別の「

  • 11. このコードでXSS攻撃を防止できましたか?
  • 12. JavascriptとXSS攻撃の防止
  • 13. タイプ0(DOMベース)JSPアプリケーションのXSS防止
  • 14. A PHPのSQLインジェクションを防ぐための機能とXSS
  • 15. XSSを防ぐためのユーザー入力のサニタイズ
  • 16. 渡されたパラメータ
  • 17. Asp.NETでXSSを防止する方法
  • 18. XSS攻撃を防止する
  • 19. JSF 2.0;エスケープ= "偽" XSSを防ぐための代替?
  • 20. jquery - XSSを防ぐためにHTMLをエスケープする方法は?
  • 21. XSSを防ぐためにHTMLエンティティをエスケープする
  • 22. 防止渡される引数
  • 23. SQLインジェクションを防ぐためにパラメータ化されたSQLクエリを書くには?
  • 24. 日付形式の反映XSSの防止
  • 25. JSFでのXSSリフレクションの防止<f:param>
  • 26. ActionResultのために渡されたパラメータを使用するMVCアクションフィルタ?
  • 27. アパッチ:mod_rewriteの:渡されたパラメータ
  • 28. 渡された関数ポインタのパラメータ
  • 29. 変更されたjarを使用したJavaアプリケーションの防止
  • 30. 3つのjs GUIを介したレイキャストピッキングの防止