有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

使用owaspjavahtmlsanitizer进行链接提取

我计划使用owasp java html净化程序对用户生成的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")

共 (1) 个答案

  1. # 1 楼答案

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