4

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

1 に答える 1

4
.allowElements(
   new ElementPolicy() {
     public String apply(String elementName, List<String> attrs) {
       // Make sure that all links open in new windows/tabs without
       // using <base target> which also affects unsanitized links.
       attrs.add("target");
       attrs.add("_blank");
       return elementName;
     }
   }, "a")
.allowAttributes("href").matching(
   new AttributePolicy() {
     public String apply(String elementName, String attributeName, String value) {
       // Collect all link URLs.
       urls.add(value);
       return value;
     }
   }).onElements("a")
于 2013-05-06T14:39:27.330 に答える