2012-04-27 52 views
4

如何配置jsoup Whitelist以允許內部定位點引用,但不允許任何值?如何配置jsoup白名單以允許內部定位點

HTML示例:

<a href="#section1" target="_self">Jump To Section 1</a> 
    <!-- ... --> 
<a name="section1">Section 1</a> 

如果我試圖用輕鬆的Whitelisthref清潔代碼被刪除。

Jsoup.clean(html, Whitelist.relaxed().addAttributes("a", "name", "target"); 

返回如下:

<a target="_self">Jump To Section 1</a> 
    <!-- ... --> 
<a name="section1">Section 1</a> 

如果我手動建立一個Whitelist並添加標籤和屬性,我想,但不叫addProtocols(....)我能得到jsoup離開到位href ,但這看起來不是一個好的解決方案,因爲它不會過濾掉包含JavaScript的href。例如,我想從下面取出一個標籤(或至少href):

<a href="javascript:alert(1111);" target="_self">Jump To Section 1</a> 
<a name="section1">Section 1</a> 

這可能與jsoup?

我沒有看到下面的補丁提交jsoup,但它並不像它製作成的jsoup代碼庫:https://github.com/jhy/jsoup/pull/77

回答

3
Whitelist whitelist=new Whitelist(); 

Cleaner cleaner = new Cleaner(whitelist); 

whitelist.addAttributes("a","accesskey","dir","lang","style","tabindex","title","href"); 

cleaner.clean(doc); 
0

如果提供/白名單沒有任何協議,那麼所有的人是隱含允許的(見isSafeAttribute)。如果你想允許內部定位,那麼你不需要在你的白名單的定位標記上撥打addProtocol,不幸的是(至少在href)。看起來有一個pull request來增加支持,但它從來沒有合併過。

請注意,如果您允許所有協議,惡意用戶可以鏈接點擊運行JavaScript:

<a href="javascript:alert('Arbitrary code');">Some text</a>

所以要特別小心的是,如果你不信任你的HTML。

如果你只想說,http,https和錨標籤,那麼我相信你是運氣不好。

相關問題