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")