簡體   English   中英

OWASP HTML Sanitizer允許在HTML中使用冒號

[英]OWASP HTML Sanitizer allow colon in HTML

我如何允許:登錄已清理的HTML? 我用它來生成java郵件時清理HTML代碼。 此代碼具有內嵌圖像內容ID,如<img src=\\"cid:image\\" height=\\"70\\" width=\\"70\\" /> 在清理時, src屬性不包含在已清理的html中。

    PolicyFactory IMAGES = new HtmlPolicyBuilder().allowUrlProtocols("http", "https")
            .allowElements("img")
            .allowAttributes("src").matching(Pattern.compile("^cid[:][\\w]+$"))
            .onElements("img")
            .allowAttributes("border", "height", "width").onElements("img")
            .toFactory();

    String html = "<img src=\"cid:image\"  height=\"70\" width=\"70\" />";
    final String sanitized = IMAGES.sanitize(html);

    System.out.println(sanitized);

上面代碼的輸出是:

<img height="70" width="70" />

為什么它不起作用

或者更確切地說,為什么它“工作得太好”

默認情況下, HtmlPolicyBuilder不允許src元素中的URL協議。 這可以防止注射等

<img src="javascript:alert('xss')"/>

這可能會導致javascript:后執行腳本javascript:在這種情況下, alert('xss')

還有其他協議(在其他元素上)可能會導致類似的問題:

即使它不使用javascript協議,仍然可以注入base64編碼的XSS注入:

<object src="data:text/html;base64,PHNjcmlwdD5hbGVydCgneHNzJyk8L3NjcmlwdD4="/> 

要么

 <a href="data:text/html;base64,PHNjcmlwdD5hbGVydCgneHNzJyk8L3NjcmlwdD4=">Click me</a> 

因此, HtmlPolicyBuilder假定包含冒號(在某些屬性中)的任何屬性值都應被視為危險。


如何解決:

您必須使用allowUrlProtocols方法明確告訴HtmlPolicyBuilder允許cid “協議”:

    PolicyFactory IMAGES = new HtmlPolicyBuilder().allowUrlProtocols("http", "https")
            .allowElements("img")
            .allowUrlProtocols("cid") // Specifically allow "cid"
            .allowAttributes("src").matching(Pattern.compile("^cid[:][\\w]+$"))
            .onElements("img")
            .allowAttributes("border", "height", "width").onElements("img")
            .toFactory();

    String html = "<img src=\"cid:image\"  height=\"70\" width=\"70\" />";
    final String sanitized = IMAGES.sanitize(html);

    System.out.println(sanitized);

輸出:

<img src="cid:image" height="70" width="70" />

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM