私は今、XSSを扱っています。OWASPを使ってJavaでXSSを検出するには
文字列にXSSが含まれているかどうかを検出する必要があります。それを解決するために私はlinkを使用しました。
public static boolean containsXSS(String value) {
if (StringUtils.isEmpty(value)) {
return false;
}
String stripXss = stripXSS(value);
return !value.equals(stripXss);
}
public static String stripXSS(String value) {
if (StringUtils.isBlank(value))
return value;
// Use the ESAPI library to avoid encoded attacks.
Encoder encoder = ESAPI.encoder();
value = encoder.canonicalize(value);
// Avoid null characters
value = value.replaceAll("\0", "");
// Clean out HTML
Document.OutputSettings outputSettings = new Document.OutputSettings();
outputSettings.escapeMode(Entities.EscapeMode.xhtml);
outputSettings.prettyPrint(false);
value = Jsoup.clean(value, "", Whitelist.none(), outputSettings);
return value;
}
私はのようなものをキャッチするために成功したん上記のコードを使用する:そして、これは私が使用しているコードです<script>alert('xss')</script>
私の問題、私はそれがないのですが、XSSを含むものとして次の文字列を特定することです: {「項目」:5}
jsoup.cleanが、私はしかし、誰成功して解決しようとしてい{"item" :5}
に変換しますので、それはです。 私のアルゴリズムが完全にであるかどうか疑問に思っています(XSSを検出するアルゴリズムはどこにありますか)、おそらく私は元のStringと比較する必要はありませんか?
あなたが私を助けることができたら大変感謝します。
おかげ
文字列にXSSが含まれているかどうかを検出することはできません。あなたの出力を適切にエスケープすれば、XSSは問題にはなりません。 – Ryan
Owaspは消毒剤を提供し、それらを使用します – Marged
どのように適切に逃げますか?大会はないの?私はapache.StringEscapeUtils.escapeHtmlだけを使うべきですか? – wantToLearn