2017-08-22 4 views
0

私は今、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が、私はしかし、誰成功して解決しようとしてい{&quot;item&quot; :5}

に変換しますので、それはです。 私のアルゴリズムが完全にであるかどうか疑問に思っています(XSSを検出するアルゴリズムはどこにありますか)、おそらく私は元のStringと比較する必要はありませんか?

あなたが私を助けることができたら大変感謝します。

おかげ

+4

文字列にXSSが含まれているかどうかを検出することはできません。あなたの出力を適切にエスケープすれば、XSSは問題にはなりません。 – Ryan

+0

Owaspは消毒剤を提供し、それらを使用します – Marged

+0

どのように適切に逃げますか?大会はないの?私はapache.StringEscapeUtils.escapeHtmlだけを使うべきですか? – wantToLearn

答えて

2

文字列がXSSが含まれている場合は検出できません。出力問題ではXSS、入力問題ではありません。 1つのコンテキストでデータが悪いと、別のコンテキストで悪意のある動作を引き起こす可能性があります。データを確実にするためにホワイトリストを使用して

  1. 検証データ(数字は番号で、名前がなどunwantef文字が含まれていない)ドメインで有効です。これにより、いくつかの攻撃は止められますが、すべての攻撃ではありません。 OWASP XSS防止チートシートで説明

  2. いけないミックス、クライアント側とサーバー側のテンプレート

  3. JavaScriptでunsanitizedデータを使用する場合は注意が必要と

  4. 文脈的エンコードのユーザーに提供出力(DOMベースを参照してくださいXSS)

+0

https://www.owasp.org/index.php/OWASP_Java_HTML_Sanitizer_Projectには、OWASPが提供するサニタイザに関する情報が含まれています_plus_名前を付けたカンニングシートへのリンク – Marged

関連する問題