2017-01-18 3 views
0

クエリパラメータを正しくエンコードする方法。私はクリーンアップを行うAnti Samyを通じてデータを渡します。それに続いて、クリーンアップされた文字列unescapeHtml4メソッドを渡す必要があります。時には、私はJsonをリクエストパラメータとして持つことがあります(下記の例1を参照してください)。次のように要求パラメータからJsonとHTMLの両方のsantizationを処理する方法は?

現在、私のコードは次のとおりです。

String str = StringEscapeUtils.unescapeXml(xml); 
    ClearResult cr = antiSamy.scan(str); 
    String cleanStr = cr.getCleanHTML(); 
    String s = StringEscapeUtils.unescapeHtml4(cleanStr); 

例1:JSONリクエストとして:私は行番号4を削除した場合、私は名前QUOT {&を取得してしまいます

& QUOT:& QUOT MAV & QUOT}

例2:のエスケープ結果次のスクリプト:<スクリプト> alert( "hi")<スクリプト>

私はXSSの脆弱性があります。

この問題を解決するにはどうすればよいですか? JSONとHTMLの両方のリクエストパラメータを処理したいどんな助けもありがとう。

答えて

2

どのような内容のものがあるか/データで何をしようとしているのかに基づいてパラメータを扱います。

パラメータにデコードするjsonが含まれている場合は、そのパラメータにアンチサミーを使用しないでください。

パラメータにhtmlとして出力するテキストが含まれている場合は、antisamyを使用します。

パラメータに、htmlとして出力するいくつかの値が含まれているjsonが含まれている場合は、最初にパラメータをjsonとしてデコードし、htmlとして出力する予定のjsonの個々の値に対してantisamyを使用します。

アンチサミーには特別な目的があります。 HTMLタグを含めることを許可するテキストを処理する。他のデータには反反感を使わないでください。代わりに、HTMLマークアップを明示的に許可したくないユーザーから受け取ったテキストを出力するときに、html構文がエスケープされていることを確認してください。

0

私が知る限り、あなたが望むものがJSONとHTMLを処理する関数を1つしか持たないのであれば、手動エスケープコードを後で置き換える方が良いでしょう。他の選択肢は、JSONとHTMLを分離することです。

これは要件と完全なシナリオによって異なります。

関連する問題