XSS に対してアプリケーションへの入力をサニタイズするためにアンチサミー ライブラリを使用しています。次のようなネストされたタグに問題があります。
<<b>script>alert('xss');<</b>/script>
私の消毒方法は次のようになります。
public String clean(String input) {
if (input == null) {
return null;
}
input = StringEscapeUtils.unescapeHtml(input);
try {
Policy policy = Policy.getInstance(getClass().getResourceAsStream("/antisamy-textonly-policy.xml"));
AntiSamy antiSamy = new AntiSamy();
CleanResults cleanResults = antiSamy.scan(input, policy);
String cleaned = cleanResults.getCleanHTML();
return StringEscapeUtils.unescapeHtml(cleaned);
} catch (PolicyException e) {
....
} catch (ScanException e) {
....
}
}
このタイプの入力に対する私のテストは失敗しています:
public void doubleTagTest() {
def cleaned = xss.clean("<<b>script>alert('xss');<</b>/script>");
assert cleaned.isEmpty();
}
と:
アサーションが失敗しました: assertcleaned.isEmpty() | | | | | false alert('xss');
at org.codehaus.groovy.runtime.InvokerHelper.assertFailed(InvokerHelper.java:386)
at org.codehaus.groovy.runtime.ScriptBytecodeAdapter.assertFailed(ScriptBytecodeAdapter.java:658)
再帰呼び出しなしでそれを処理する方法はありますxss.clean()
か?