2012-07-06 5 views
4

owasp-java-html-sanitizer를 사용하여 사용자 생성 HTML에 대해 몇 가지 작업을 수행 할 계획입니다.owasp-java-html-sanitizer를 사용한 링크 추출

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

당신은 당신이 (...)'할 "HREF".equals 필요가 없도록 속성 정책을 사용 '또는 수 돌이 'attrs' 배열의 내용. 'target '을 다른 곳에 허용합니까? 그렇다면 원하는 것이 아닌 두 개의 목표로 끝날 수도 있습니다. –

+0

당신의 질문은 무엇입니까, btw? –

+0

잠시 기다려 봤지만 질문은 'hr'이전이었고 모든 것이 내가 질문 한 후에 알아 낸 것입니다. 만약 당신이'속성 정책'을 사용하여 대답을 풀어 냈다면 나는 그것을 대답으로 받아 들일 것입니다. –

답변

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") 
관련 문제