2013-10-22 2 views
0

XSS에 대한 내 애플리케이션의 입력을 위생 처리하기 위해 antisamy 라이브러리를 사용하고 있습니다. 나는 같은 중첩 된 태그에 문제가 :XSS는 중첩 된 HTML 태그 입력을 살균합니다.

public String clean(String input) { 
    if (input == null) { 
     return null; 
    } 
    input = StringEscapeUtils.unescapeHtml(input); 
    try { 
     Policy policy = Policy.getInstance(getClass().getResourceAsStream("/antisamy-textonly-policy.xml")); 
     AntiSamy antiSamy = new AntiSamy(); 
     CleanResults cleanResults = antiSamy.scan(input, policy); 
     String cleaned = cleanResults.getCleanHTML(); 
     return StringEscapeUtils.unescapeHtml(cleaned); 
    } catch (PolicyException e) { 
     .... 
    } catch (ScanException e) { 
     .... 
    } 
} 

입력이 유형에 대한 나의 테스트가 실패 :

public void doubleTagTest() { 
    def cleaned = xss.clean("<<b>script>alert('xss');<</b>/script>"); 
    assert cleaned.isEmpty(); 
} 

로 :

<<b>script>alert('xss');<</b>/script> 

내 살균 방법처럼 보인다

어설 션 실패 : assert cleaned.isEmpty() | | | false 알림 ('xss');

at org.codehaus.groovy.runtime.InvokerHelper.assertFailed(InvokerHelper.java:386) 
at org.codehaus.groovy.runtime.ScriptBytecodeAdapter.assertFailed(ScriptBytecodeAdapter.java:658) 

어떻게 xss.clean에 재귀 호출없이 처리 할 수있는 어떤 생각을 가지고 있습니까()?

+0

두 번째 unescapeHtml은 꽤 위험한 것처럼 보입니다. – Erlend

답변

1

Antisamy가 올바른 결과를 생성합니다. 잘못된 형식의 태그가 제거되어 일반 텍스트 alert('xss');이 남습니다.

는 다음

<b<i>>Hello World!</b</i>>

굵은 기울임 꼴 태그는 어떻게 든 뒤죽박죽이되었다 고려 - antisamy가 제대로 올바른 텍스트 Hello World!를 떠나 깨진 태그를 제거합니다. 원래 테스트에서 남아있는 자바 스크립트처럼 보이는 평범한 텍스트는 걱정할 필요가 없습니다. 유해한 <script> 태그가 제거되었습니다.