2016-11-23 40 views
0

我正在嘗試使用Java lib Jsoup來清理包含可能的惡意內容(XSS)的文本字符串。我必須允許<鏈接,但我不希望爲XSS原因允許javascript鏈接。org.jsoup.Jsoup沒有處理javascript鏈接?

下面的測試用例會失敗,因爲javascript協議仍然是允許的。任何想法如何解決這個使用Jsoup內置函數?

@Test 
public void test() { 

    Whitelist tWhitelist = Whitelist.none(); 

    tWhitelist.addAttributes("a", "href"); 
    tWhitelist.removeProtocols("a", "href", "javascript");  

    String tUnsafe = "<a href=\"javascript:alert(1)\">Link</a> is a link."; 
    assertEquals("Link is a link.", Jsoup.clean(tUnsafe, tWhitelist)); 
} 

    org.junit.ComparisonFailure: expected:<[Link] is a link.> but was:<[<a href="javascript:alert(1)">Link</a>] is a link.> 

回答

1

這是導致你在白名單中添加a標籤,你可以直接使用none白名單,如:

​​

或者你可以使用basic白名單,以保持其他HREF ,如:

Whitelist tWhitelist = Whitelist.basic(); 

    tWhitelist.removeProtocols("a", "href", "javascript"); 
    String tUnsafe = "<a href=\"javascript:alert(1)\">Link</a> is a link.<a href=\"http://www.google.com\" rel=\"nofollow\">google</a>"; 
    assertEquals("<a rel=\"nofollow\">Link is a link.</a><a href=\"http://www.google.com\" rel=\"nofollow\">google</a>", Jsoup.clean(tUnsafe, tWhitelist)); 
0

找到我自己...這將使指定的協議有效但javascript協議被刪除

Whitelist whitelist = Whitelist.none(); 

    whitelist 
     .addTags("a") 
     .addAttributes("a", "href") 
     .addProtocols("a", "href", "http", "https", "mailto"); 

    String safeText = Jsoup.clean(untrustedText, whitelist);