【发布时间】:2012-07-07 07:02:28
【问题描述】:
我打算使用 owasp-java-html-sanitizer 对用户生成的 html 执行一些任务。
我想从 html 字符串中提取 URL 列表。
我还想确保所有链接的目标都设置为“_blank”,这似乎类似于HtmlPolicyBuilder.requireRelNofollowOnLinks 配置。 (完成)
PolicyFactory linkRewrite = new HtmlPolicyBuilder().allowAttributes("href").onElements("a")
.requireRelNofollowOnLinks().allowElements(new ElementPolicy() {
public String apply(String elementName, List<String> attrs) {
attrs.add("target");
attrs.add("_blank");
return "a";
}
}, "a").toFactory();
这会将target="_blank" 添加到链接中,不确定它是实现它的最佳方式。
这也会提取 URL:
.allowElements(new ElementPolicy() {
public String apply(String elementName, List<String> attrs) {
for (int i = 0, n = attrs.size(); i < n; i += 2) {
if ("href".equals(attrs.get(i))) {
urls.add(attrs.get(i + 1));
break;
}
}
attrs.add("target");
attrs.add("_blank");
return elementName;
}
}, "a")
【问题讨论】:
-
您可以使用属性策略,这样您就不需要执行
"href".equals(...)或循环遍历attrs数组的内容。你在其他地方允许target吗?如果是这样,您最终可能会得到两个可能不是您想要的目标。 -
你的问题是什么,顺便说一句?
-
已经有一段时间了,但我认为问题在
hr之前,一切都是我提出问题后的想法。如果您使用attribute policy充实答案,我会接受它作为答案。
标签: java owasp html-sanitizing