如何在使用OWASP Java HTML Sanitizer清理html时允许嵌入的图像

时间:2017-11-17 07:28:32

标签: java html owasp

我想允许:

<img src="data:image/jpg;base64,..."/>

我看到there's documentation on how to do this,但我不明白如何实现它。我试图添加模式

.allowUrlProtocols("data")
.allowAttributes("src").matching(Pattern.compile("$data:image.*")).onElements("img")

但那没用。我理解模式必须是正则表达式,但我不确定我是否理解它是如何连接起来的。我知道它正试图寻找img标签,然后查看src属性。我的理解是,它应该寻找字符串数据:图像和if发现允许它通过。但那并没有发生......

2 个答案:

答案 0 :(得分:1)

问题是我有:

private static final PolicyFactory POLICY_DEFINITION = new HtmlPolicyBuilder()
    .allowUrlProtocols("data")
    .allowAttributes("src").matching(ONSITE_OR_OFFSITE_URL).onElements("img")
    .allowAttributes("src").matching(Pattern.compile("^.*data:image/.*$")).onElements("img")
    .toFactory();

这引起了一个问题,我认为allowAttribute会将两者结合起来。相反,你需要做的是OR模式匹配(对于你想要匹配的任何模式),如:

Pattern EMBEDDED_IMAGE = Pattern.compile("^.*data:image/.*$")
ONSITE_OR_OFFSITE_URL_OR_EMBEDDED_IMAGE = matchesEither(ONSITE_URL, OFFSITE_URL, EMBEDDED_IMAGE);

private static final PolicyFactory POLICY_DEFINITION = new HtmlPolicyBuilder()
    .allowUrlProtocols("data")
    .allowAttributes("src").matching(ONSITE_OR_OFFSITE_URL_OR_EMBEDDED_IMAGE).onElements("img")
    .toFactory();

此代码假设您使用的是EbayPolicyExample

答案 1 :(得分:1)

如果你到了这里(就像我一样),但是你正在使用HTMLSanitizer for C#,那么答案是:

var sanitizer = new HtmlSanitizer();
sanitizer.AllowedSchemes.Add("data");