나는 다른 종류의 공격에 대해 걱정하지 않는다. HTML Encode가 모든 종류의 XSS 공격을 막을 수 있는지 여부를 알고 싶을뿐입니다.HTML 인코딩은 모든 종류의 XSS 공격을 차단합니까?
HTML 인코딩을 사용하더라도 XSS 공격을 수행 할 수있는 방법이 있습니까?
나는 다른 종류의 공격에 대해 걱정하지 않는다. HTML Encode가 모든 종류의 XSS 공격을 막을 수 있는지 여부를 알고 싶을뿐입니다.HTML 인코딩은 모든 종류의 XSS 공격을 차단합니까?
HTML 인코딩을 사용하더라도 XSS 공격을 수행 할 수있는 방법이 있습니까?
번호
몇 가지 태그 (질문 정말 지점), 대해 HTMLEncode 단순히 모든 XSS 공격을 포함하지 않습니다를 허용하는 주제를 옆으로 퍼팅. 예를 들어
고려 서버 생성 클라이언트 측 javascript - 서버가 htmlencoded 값을 동적으로 출력합니다. 직접 클라이언트 쪽 자바 스크립트로, htmlencode 주입 스크립트 실행을 중지하지 않습니다.
다음, 다음 의사 생각 : 지금
<input value=<%= HtmlEncode(somevar) %> id=textbox>
을 경우 그 즉시 명확하지,의 somevar (물론, 사용자가 보낸)는
a onclick=alert(document.cookie)
에 예를 들어 설정되어있는 경우 결과 출력은 분명히 작동 할 것입니다
<input value=a onclick=alert(document.cookie) id=textbox>
입니다. 분명히, 이것은 (거의) 다른 스크립트 일 수 있습니다 ... 그리고 HtmlEncode는별로 도움이되지 않습니다.
DOM 기반 XSS (예 : # 값을 기반으로 악성 스크립트가 클라이언트에서 동적으로 생성 됨)라고하는 XSS의 세 번째 버전을 포함하여 고려해야 할 몇 가지 추가 벡터가 있습니다. 또한
UTF-7 형 공격에 대해 잊지 마세요 - 공격이
+ADw-script+AD4-alert(document.cookie)+ADw-/script+AD4-
가 인코딩하는 것이 훨씬 아무것도 ...
솔루션
같은 (물론, 적절한 외에 보인다 제한적인 화이트리스트 입력 유효성 검사)은 인코딩을 수행합니다. 인코딩 : HtmlEncoding is great 출력 컨텍스트가 HTML이거나 JavaScriptEncoding, VBScriptEncoding 또는 AttributeValueEncoding이 필요한 경우 등MS ASP.NET을 사용하는 경우 모든 필요한 컨텍스트 인코딩 방법을 제공하는 Anti-XSS 라이브러리를 사용할 수 있습니다. 모든 인코딩이 HTTP 모두, 사용자 입력에 제한뿐만 아니라 데이터베이스, 텍스트 파일에서 값을 저장 등
아, 그리고 캐릭터 세트를 명시 적으로 설정하는 것을 잊지 마세요되어서는 안된다는
저는 그렇게 생각하지 않습니다. Html Encode는 모든 기능 문자 (브라우저에서 코드로 해석 할 수있는 문자)를 브라우저에서 파싱 할 수없는 엔터티 참조로 변환하므로 실행할 수 없습니다.
<script/>
위의 사항을 브라우저에서 실행할 수있는 방법은 없습니다.
** 브라우저의 버그는 당연히 자신의 경우를 제외하고. * 당신이 합격을 인코딩하는 경우
또는 Javascript가 어떻게 든 GUI 용도로 사용자 입력을 변경하는 데 사용되는 경우. XSS 취약점에 대해 처음 엔 < and >으로 인코딩되었지만,이 기능을 통과하면 다시 대체되었습니다! 그래서 ... XSS 예방이 진행됩니다. :) – verix
. (플랫폼과 htmlencode 구현에 따라 다름) 그러나 유용한 웹 애플리케이션은 너무 복잡하여 모든 부분을 확인하는 것을 잊기 쉽습니다. 또는 제 3 자 구성 요소가 안전하지 않을 수 있습니다. 아니면 인코딩을 했어도 코드 경로를 사용하지 않아 다른 곳에서 잊어 버렸을 수도 있습니다.
입력면에서 내용을 확인할 수도 있습니다. 그리고 데이터베이스에서 읽은 내용을 확인하고 싶을 수도 있습니다.
을 표시하기 전에 모든 사용자 입력을 체계적으로 인코딩하면 안전합니다. 당신은 여전히 100 % 안전하지 않습니다.
당신이 처리 할 사용자가 이미지 나 굵은 텍스트 또는 사용자의 입력을 필요로하는 기능을 게시 할 수 있도록 일부 태그 인코딩되지 않은 가자 할 때 발생하는 추가 문제에서
(자세한 내용은 Avid의 포스트 @ 참조) 인코딩되지 않은 마크 업으로 변환 (또는 변환)됩니다.
어떤 태그가 허용되고 어떤 태그가 아닌지 결정하기 위해 의사 결정 시스템을 설정해야하며 허용되지 않은 태그가 통과 할 수있는 방법을 찾아 낼 가능성이 항상 있습니다.
조엘의 조언 인 Making Wrong Code Look Wrong을 따르거나 처리되지 않은 사용자 데이터 (정적 유형 지정)를 출력 할 때 경고/컴파일하지 않음으로써 your language helps you 일 경우 도움이됩니다.
다른 모든 사람들이 언급했듯이 모든 사용자 입력을 표시하기 전에 사용자 입력을 인코딩하면 안전합니다. 여기에는 사용자 입력에 의해 변경 될 수있는 데이터베이스에서 검색된 모든 요청 매개 변수와 데이터가 포함됩니다.
mentioned by Pat 때때로 모든 태그가 아닌 일부 태그 만 표시 할 수 있습니다. 이를 수행하는 일반적인 방법 중 하나는 Textile, Markdown 또는 BBCode과 같은 마크 업 언어를 사용하는 것입니다. 그러나 마크 업 언어조차도 XSS에 취약 할 수 있습니다.
# Markup example
[foo](javascript:alert\('bar'\);)
당신은 내가 &을 구문 분석하는 몇 가지 기존 라이브러리를 찾는 추천을 통해 "안전한"태그를하게하기로 결정하는 경우
출력하기 전에 코드를 소독. 거기에 a lot of XSS vectors 거기에 당신의 살균제가 상당히 안전하기 전에 감지해야 할 것입니다.출력 필터링을 처리 할 수있는 타사 라이브러리를 찾는 데 필요한 두 번째 메타 뷰다의 조언. HTML 문자를 중립화하는 것은 XSS 공격을 막는 좋은 방법입니다.그러나 메타 문자를 변환하는 데 사용하는 코드는 회피 공격에 취약 할 수 있습니다. 예를 들어 유니 코드 및 국제화를 제대로 처리하지 못하는 경우입니다.
homebrew 출력 필터는 고전적인 단순한 실수 필터 인 <을 잡아내는 것이지만 "사용자가 제어하는 출력을 HTML 태그의 속성 공간으로 나눌 수 있습니다. 자바 스크립트를 DOM.
: 헤더와 메타 태그, 그렇지 않으면 당신은 여전히
... 좀 더 정보, 꽤 명확한 목록 (지속적으로 업데이트)를 UTF-7의 취약점을해야합니다, RSnake의 치트 시트를 확인 d는 HTML 정수기 (http://htmlpurifier.org/)를 제안하고 싶습니다. html을 필터링하는 것이 아니라 b asically 토큰 화하고 다시 컴파일합니다. 진정한 산업력입니다.
유효한 html/xhtml 출력을 보장 할 수있는 추가 이점이 있습니다.
또한 n'thing 섬유, 그것의 훌륭한 도구와 나는 그것을 항상 사용하지만 html 정화기 너무 그것을 실행할 수 있습니다.
내가 토큰의 의미를 이해하지 못했다고 생각합니다. HTML 정수기는 '필터링'만하는 것이 아니라 실제로 HTML을 재구성합니다. http://htmlpurifier.org/comparison.html
아니오, 일반적인 HTML 토큰 만 인코딩하면 XSS 공격으로부터 사이트가 완전히 보호되지 않습니다. 예를 들어,이 XSS 취약점이 google.com에서 발견, 참조 :
http://www.securiteam.com/securitynews/6Z00L0AEUE.html
취약점의 유형에 대한 중요한 것은 공격자가 UTF-7을 사용하여 자신의 XSS 페이로드를 인코딩 할 수 있는지, 그리고 당신 경우 페이지에서 다른 문자 인코딩을 지정하지 않으면 사용자의 브라우저가 UTF-7 페이로드를 해석하고 공격 스크립트를 실행할 수 있습니다.
확인해야 할 다른 한 가지는 입력 내용의 출처입니다. 리퍼러 문자열 (대부분의 경우)을 사용하여 자신의 페이지에서 왔는지 확인할 수 있지만 양식에 숨겨진 임의의 숫자 또는 무언가를 입력 한 다음 세션을 설정할 수있는 변수를 사용하여 확인할 수 있습니다. 입력이 귀하의 사이트에서오고 일부 피싱 사이트에서 오지는 않습니다.
글자는 처음에 잘못되었습니다. id = 텍스트 상자> 하지 <입력 값 = "<% = 대해 HTMLEncode (의 somevar)"%> ID = 텍스트 상자> 의 에디터가 예를 들어이 포함되어 있는지 알 수없는 경우 빈. – Erik
그게 정확히 포인트입니다 - HTMLEncode는 실수로부터 당신을 보호하지 않습니다. 물론, 프로그래머는 somevar에 23을 포함시킬 것을 기대했는데, 그 중 공허한 것을 공격하기로 결정한 악의적 인 공격자가 ... – AviD
SOMEVAR에이 텍스트가 포함되어있는 이미지를 동봉하는 것이 도움이되지 않습니다. "onclick ="alert(); ""| 그러면 유효한 태그처럼 렌더링됩니다. – Espo