2008-09-21 3 views
1

블로그 스타일 코멘트에 ASP.NET 웹 양식을 사용하고 있습니다.XSS를 방지하면서 어떻게 <img>의 사용을 허용합니까?

편집 1 : 이것은 처음에는 생각보다 복잡해 보입니다. src를 어떻게 필터합니까?
아직 실제 HTML 태그를 사용하는 편이 좋지만, 너무 복잡해지면 맞춤 경로를 선택할 수 있습니다. 아직 XML을 수행하지 않았으므로 이에 대해 더 자세히 알아야합니까?

답변

1

XML 파서를 사용하여 입력의 유효성을 검사하고 허용하지 않으려는 모든 요소와 특성을 삭제하거나 인코딩합니다. 이 경우 <img>tag, and all attributes from that except src, 대체 및 제목을 제외한 모든 태그를 삭제하거나 인코딩하십시오.

+0

또한 http : //로 시작하지 않는 URL도 허용하지 않아야합니다 (특히 javascript :) – rpetrich

3

IMG 만 허용한다면, 허용하기 위해 간단한 대괄호 구문을 사용하는 것이 좋습니다. 이것은 파서의 필요성을 제거하고 파서와 함께 다른 위험한 엣지 케이스의 부하를 줄입니다. 말, 뭔가 같은 : 악성 일들이 너무 SRC 부분에 전달되지 얻을 수 있도록 당신은 SRC 주소를 필터링해야

Look at this! <img src="http://a.b.c/m.jpg" /> 

로 변환되는 것이다

Look at this! [http://a.b.c/m.jpg] 

. 당신이 markdown 같은 표준 구문을 사용 (말 그대로 모든 HTML을 탈출 할 수 C/B 일을 더 쉽게 만드는)가 아닌 HTML 형식으로가는 끝낼 경우 어쩌면

Look at this! [javascript:alert('pwned!')] 
+0

이미지 확장을 제한하면 실제로 많은 도움이되지 않습니다. 서버에서 전달을 설정하고 브라우저는 원하는 URL을로드합니다.그러나 그래, 나는 동의한다, 어떤 대체 구문을 사용하는 것은 이와 같은 것을 위해 HTML 위생 처리와 싸우는 것보다 훨씬 좋은 생각 같다. –

+0

대괄호 구문은 태그의 모든 부분을 해킹하지 않지만 HTML 값 또는 대괄호 구문으로 허용되는지 여부에 관계없이 신중하게 src 값을 필터링하지 않고 중요합니다. 익스플로잇과 취약한 브라우저에 대해서는 http://ha.ckers.org/xss.html을 참고하십시오. – micahwittman

+0

불행히도 의견에 누군가 Food [1]과 같은 배열을 입력하면 내 파서가 이미지로 변환하려고 시도하지 않습니다. – danmine

0

@chakrit는 맞춤 구문을 사용하여 제안합니다. 괄호로 묶은 URL - 이것은 최상의 솔루션 일 수 있습니다. BTW 난 그냥 정의의 좋은 예를 발견
를 (- 당신은 확실히는
가 그냥 당신이 제대로 전체 의견을 인코딩 (여기 Will HTML Encoding prevent all kinds of XSS attacks?을이에 대한 내 대답을 참조 상황에 따라) 확인 등을 분석 덤비는 시작하려는 해달라고 syntax right there ... ;-))

마찬가지로 언급했듯이 파일 확장자는 jpg/gif/etc로 제한합니다 (우회 할 수도 있음). 프로토콜을 제한 할 수도 있습니다 (예 : http : //).

XSS 외에도 고려해야 할 또 다른 문제는 CSRF (http://www.owasp.org/index.php/Cross-Site_Request_Forgery)입니다. 이 보안 문제에 익숙하지 않은 경우 기본적으로 침입자는 브라우저에서 응용 프로그램에 유효한 인증 요청을 제출하도록 강요 할 수 있습니다 (예 : 돈을 이체하거나 암호를 변경). 이 사이트가 귀하의 사이트에서 호스팅되는 경우 익명으로 취약한 애플리케이션 (, 포함)을 공격 할 수 있습니다. (다른 응용 프로그램이 취약한 경우에도 공격을 당해도 자신의 잘못이 아니지만 악의적 인 공격 호스트 또는 공격 원이되고 싶지는 않습니다 ...). 자신의 사이트에 관한 한 공격자가 사이트의 사용자 암호를 변경하는 것이 훨씬 쉽습니다.

관련 문제