2013-08-14 2 views
0

사용자가 데이터를 게시 할 수있는 프로필 입력란이 있습니다. 다음 정규 표현식 패턴으로 무엇이든 블록합니다. /<(.+?)>/이 필터에 대해 XSS를 사용할 수 있습니까?

<으로 시작하고>로 끝나는 것을 차단합니다. 이것이 XSS를 예방할 수 있습니까? 즉, <> HTML 태그를 사용할 수 없으면 현재 할 수있는 일이 많지 않습니다.

+2

Do not do. HTML을 렌더링 할 때 데이터를 올바르게 이스케이프 처리해야합니다. – SLaks

+0

대답은 '예'입니다. 어쨌든이 접근법은 실패 할 운명입니다. 적절한 엔티티 인코딩을 수행하는 템플릿을 사용하십시오. – Antimony

+0

@Antimony 어떻게 아직도 가능합니까? 그들은 정말로 그것을 입력 할 방법이 없습니까? – Justin

답변

4

실제로 닫는 대괄호가 필요없는 xss 공격이 있습니다. 예를 들어

, 어쨌든

<IMG SRC="javascript:alert('XSS')" 

IE

당신이 당신에게 교훈을 가르쳐야한다 깨닫지 못했다는 사실을 작동 this page 목록의 하나. 이런 블랙리스트는 오류가 발생하기 쉽고 실패 할 운명입니다. 적절한 이스케이프 (이 경우 HTML 엔티티 인코딩이지만 출력이 표시 될 컨텍스트에 따라 다름)를 적용하는 템플릿을 사용해야합니다.

도망 갈 수있는 경우 영숫자와 같은 안전한 문자 세트로 입력을 제한하십시오. 이렇게하면 처음에는 걱정할 필요가 없습니다. 그리고 유니 코드와 널 문자를 올바르게 처리하도록하십시오.

0

브라우저는 HTML을 구문 분석 할 때 용서할 수 있습니다. 나는 태그를 닫지 않고 다음과 같은 입력이 작동합니다 의심 :

<input onfocus=alert(1) autofocus type=text 

사용 엔티티 탈출 또는 화이트리스트 대신

아, 그리고. 가 일치하지 않으므로 다른 바이 패스가 있습니다.

<script 
> 
관련 문제