我想允许:
<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发现允许它通过。但那并没有发生......
答案 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");