2017-08-22 55 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),也許我並不需要比較原始字符串?

如果你能幫助我,我將非常感激。

謝謝

+4

您不能「檢測字符串是否包含XSS」。正確地轉移輸出並且XSS不會成爲問題。 – Ryan

+0

Owasp提供消毒劑,使用那些 – Marged

+0

你如何正確地逃脫?沒有約定嗎?我應該只使用apache.StringEscapeUtils.escapeHtml? – wantToLearn

回答

2

您無法檢測字符串是否包含XSS。 XSS在輸出問題上,而不是輸入問題。數據在一種情況下是良性的,可能導致另一種惡意行爲。使用白名單,以確保數據在您的域名有效

  1. 驗證數據(數字編號,名稱不包含unwantef字符等)。這將阻止一些但絕對不是所有的攻擊。

  2. 如OWASP XSS預防速查表

  3. 不要混合客戶端和服務器端模板

  4. 在javascript使用unsanitized數據時要小心解釋

  5. 內容相關編碼用戶提供的輸出(參見基於DOM XSS)

+0

https://www.owasp.org/index.php/OWASP_Java_HTML_Sanitizer_Project包含OWASP _plus_提供的殺菌劑信息,鏈接到您指定的備忘單 – Marged