http-header“X-XSS-Protection”은 무엇입니까?


194

그래서 나는 지금 telnet에서 재미를 위해 HTTP를 가지고 놀았습니다 (즉 telnet google.com 80, 다른 헤더와 같은 임의의 GET과 POST를 입력 하고 넣는 것). 그러나 나는 google.com이 헤더로 전송하는 것을 발견했습니다. 몰라

http://www.w3.org/Protocols/rfc2616/rfc2616.html을 살펴본 결과 Google이 내뿜는 것으로 보이는 특정 http-header에 대한 정의를 찾지 못했습니다.

GET / HTTP/1.1

HTTP/1.1 200 OK
Date: Wed, 01 Feb 2012 03:42:24 GMT
Expires: -1
Cache-Control: private, max-age=0
Content-Type: text/html; charset=ISO-8859-1
Set-Cookie: PREF=ID=6ddbc0a0342e7e63:FF=0:TM=1328067744:LM=1328067744:S=4d4farvCGl5Ww0C3; expires=Fri, 31-Jan-2014 03:42:24 GMT; path=/; domain=.google.com
Set-Cookie: NID=56=PgRwCKa8EltKnHS5clbFuhwyWsd3cPXiV1-iXzgyKsiy5RKXEKbg89gWWpjzYZjLPWTKrCWhOUhdInOlYU56LOb2W7XpC7uBnKAjMbxQSBw1UIprzw2BFK5dnaY7PRji; expires=Thu, 02-Aug-2012 03:42:24 GMT; path=/; domain=.google.com; HttpOnly
P3P: CP="This is not a P3P policy! See http://www.google.com/support/accounts/bin/answer.py?hl=en&answer=151657 for more info."
Server: gws
X-XSS-Protection: 1; mode=block
X-Frame-Options: SAMEORIGIN
Transfer-Encoding: chunked

1000

누구나 뭔지 알아 X-XSS-Protection?


6
FWIW, 헤더 필드 사양을 볼 수있는 "올바른"장소입니다 되지 는 HTTP 스펙 (현재 RFC 2616)하지만, IANA 메시지 헤더 필드 레지스트리 (그 존재가이 거기에 목록에없는 말했다)
줄리안 Reschke

1
@JulianReschke, 왜 그렇습니까? HTTP 사양이 HTTP에 대해 권위적이지 않아야합니까?
Pacerier

1
HTTP 스펙은 헤더 레지스트리를 IANA에 위임합니다.
Julian Reschke

답변:


107

X-XSS-Protection은 Internet Explorer 8 (및 최신 버전)에서 이해하는 HTTP 헤더입니다. 이 헤더를 사용하면 도메인이 IE8의 "XSS 필터"를 설정 및 해제 할 수 있으므로 일부 범주의 XSS 공격이 방지됩니다. IE8에는 기본적으로 필터가 활성화되어 있지만 설정을 통해 서버를 끌 수 있습니다

   X-XSS-Protection: 0

http://blogs.msdn.com/b/ieinternals/archive/2011/01/31/controlling-the-internet-explorer-xss-filter-with-the-x-xss-protection-http-header를 참조하십시오 . aspx


108
이것은 매우 모호합니다. 정확히 어떻게 이 헤더는 XSS를 방지합니까? 이제 IE는 X-XSS-Protection:1XSS를 방지하기 위해 어떤 알고리즘을 사용합니까?
Pacerier

11
독점 기술이기 때문에 세부 사항을 찾기가 어렵습니다. 기본적으로 IE는 브라우저가 웹 사이트로 전송하는 의심스러운 모양의 매개 변수가 디코딩 된 응답으로 돌아 오는지 모니터링합니다. 예를 들어, 사용자가 attack-me.com/… ( "> <script> alert ( 'XSS') </ script>)을 클릭하고 그 결과 해당 스크립트가 포함 된 페이지를 수신하면 IE에서이를 방지합니다.
Luca Invernizzi

11
따라서 저장된 XSS (Persistent XSS라고도 함)를 감지 할 수단이 없기 때문에 Reflected XSS ( infosecisland.com/blogview/… ) 에 대해서만 보호하는 것으로 보입니다 (증거하기가 어렵습니다 ).
Luca Invernizzi

11
흠 IE를
더보기

5
글쎄, 그것은 마케팅 보풀에 제시되었지만 코드는 작동하는 것 같습니다. 여기에서 Enhanceie.com/test/xss/BlockMode.asp(MSDN 블로그 게시물에 링크 됨)를 테스트 할 수 있습니다 .
Luca Invernizzi

61
  • X-XSS-Protection: 1 : 강제 XSS 보호 (사용자가 XSS 보호를 비활성화 한 경우 유용)

  • X-XSS-Protection: 0 : XSS 보호 비활성화

  • 토큰 mode=block은 잠재적 XSS 반사 (= 비 영구) 공격이 감지되면 브라우저 (IE8 + 및 웹킷 브라우저)가 페이지를 렌더링하는 것을 방지합니다 (위생 대신).

/! \ 경고, mode=blockIE8에 취약점을 만듭니다 ( 추가 정보 ).

자세한 정보 : http://blogs.msdn.com/b/ie/archive/2008/07/02/ie8-security-part-iv-the-xss-filter.aspxhttp://blog.veracode.com / 2014 / 03 / 설정 가이드 라인 보안 헤더 /


6
기록의 경우, IE8 버그 (CVE-2009-4074) 고정
yakatz

developer.mozilla.org/es/docs/Web/HTTP/Headers/X-XSS-Protection 이 링크에서, 우리는 X-XSS-보호의 설명을 찾을 수 있습니다
마리아 몬테네그로

1
그 참고 0이 헤더의 유일한 안전 값입니다. 자세한 내용은 stackoverflow.com/a/57802070/334451 을 참조하십시오.
Mikko Rantalainen

49

이 응답 헤더는 사용자 에이전트의 기본 제공 반사 XSS 보호를 구성하는 데 사용할 수 있습니다. 현재는 Microsoft Internet Explorer, Chrome 및 Safari (WebKit) 만이 헤더를 지원합니다.

Internet Explorer 8에는 XSS 필터 로 알려진 사이트 간 스크립팅 공격을 막는 데 도움이되는 새로운 기능이 포함되었습니다 . 이 필터는 인터넷, 신뢰 및 제한 보안 영역에서 기본적으로 실행됩니다. 로컬 인트라넷 영역 페이지는 동일한 헤더를 사용하여 보호를 옵트 인 할 수 있습니다.

질문에 게시 한 헤더에 대해

헤더 X-XSS-Protection: 1; mode=block는 XSS 필터를 활성화합니다. XSS 공격이 감지되면 페이지를 삭제하지 않고 브라우저에서 페이지 렌더링을 방지합니다.

2010 년 3 월에 X-XSS-Protection 헤더 (mode = block)에서 새 토큰에 대한 IE8 지원을 추가했습니다.

X-XSS-Protection: 1; mode=block

이 토큰이 존재하는 경우 잠재적 XSS 리플렉션 공격이 탐지되면 Internet Explorer에서 페이지 렌더링을 방지합니다. XSS 공격을 외과 적으로 제거하기 위해 페이지를 삭제하려고 시도하는 대신 IE는 "#"만 렌더링합니다.

Internet Explorer는 가능한 크로스 사이트 스크립팅 공격을 인식합니다. 이벤트를 기록하고 사용자에게 적절한 메시지를 표시합니다. MSDN 기사는이 헤더의 작동 방식을 설명합니다.

이 필터가 IE 에서 작동하는 방식

이 기사에 대한 자세한 내용은 https://blogs.msdn.microsoft.com/ie/2008/07/02/ie8-security-part-iv-the-xss-filter/

XSS 필터는 브라우저를 통해 흐르는 모든 요청 / 응답을 볼 수있는 IE8 구성 요소로 작동합니다. 필터는 사이트 간 요청에서 XSS 가능성을 발견하면 서버의 응답에서 재생 될 경우 공격을 식별하고 제거합니다. 사용자에게는 대답 할 수없는 질문이 표시되지 않습니다. IE는 악성 스크립트가 실행되지 않도록 차단합니다.

새로운 XSS 필터를 사용하면 Type-1 XSS 공격이 발생하는 IE8 Beta 2 사용자에게 다음과 같은 알림이 표시됩니다.

IE8 XSS 공격 알림

페이지가 수정되었으며 XSS 공격이 차단되었습니다.

이 경우 XSS 필터가 URL에서 사이트 간 스크립팅 공격을 식별했습니다. 식별 된 스크립트가 응답 페이지로 다시 재생되면서이 공격을 차단했습니다. 이런 식으로, 필터는 서버에 대한 초기 요청을 수정하거나 전체 응답을 차단하지 않고 효과적입니다.

사이트 간 스크립팅 필터 이벤트는 Windows Internet Explorer 8이 사이트 간 스크립팅 (XSS) 공격을 감지하고 완화 할 때 기록됩니다. 크로스 사이트 스크립팅 공격은 일반적으로 악의적 인 웹 사이트가 다른 웹 사이트에 대한 합법적 인 요청에 JavaScript 코드를 주입 ​​(추가) 할 때 발생합니다. 원래 요청은 일반적으로 다른 페이지에 대한 링크 또는 공통 서비스 (예 : 방명록)를 제공하는 CGI (Common Gateway Interface) 스크립트와 같이 무해합니다. 삽입 된 스크립트는 일반적으로 두 번째 웹 사이트에서 허용하지 않는 권한있는 정보 또는 서비스에 액세스하려고합니다. 응답 또는 요청은 일반적으로 악의적 인 웹 사이트로 결과를 반영합니다. Internet Explorer 8의 새로운 기능인 XSS 필터는 URL 및 HTTP POST 요청에서 JavaScript를 감지합니다. JavaScript가 감지되면 XSS 필터는 공격 요청이 변경없이 제출 된 경우 공격 웹 사이트에 반환 될 정보 인 리플렉션 증거를 검색합니다. 리플렉션이 감지되면 XSS 필터는 추가 요청을 실행할 수 없도록 원래 요청을 삭제합니다. 그런 다음 XSS 필터는 해당 작업을 사이트 간 스크립트 필터 이벤트로 기록합니다. 다음 이미지는 사이트 간 스크립팅 공격을 방지하기 위해 수정 된 사이트의 예입니다.

출처 : https://msdn.microsoft.com/en-us/library/dd565647(v=vs.85).aspx

웹 개발자는 자신의 컨텐츠에 대해 필터를 사용하지 않을 수 있습니다. HTTP 헤더를 설정하면됩니다 :

X-XSS-Protection: 0

보안 헤더에 대한 추가 정보


1
그 참고 X-XSS-Protection: 0이 기능을위한 유일한 안전 헤더입니다. 자세한 내용은 stackoverflow.com/a/57802070/334451
Mikko Rantalainen의

10

유용한 HTTP 헤더 목록 에서 볼 수 있습니다 .

X-XSS-Protection : 이 헤더는 최신 웹 브라우저에 내장 된 XSS (Cross-Site Scripting) 필터를 활성화합니다. 일반적으로 어쨌든 기본적으로 활성화되므로이 헤더의 역할은 사용자가 비활성화 한 경우이 특정 웹 사이트에 대한 필터를 다시 활성화하는 것입니다. 이 헤더는 IE 8 이상 및 Chrome에서 지원됩니다 (어떤 버전인지 확실하지 않음). anti-XSS 필터는 Chrome 4에 추가되었습니다. 해당 버전이이 헤더를 준수하는지 여부는 알 수 없습니다.


불행히도이 기능 보안 문제를 일으키고 안전한 가치는 X-XSS-Protection: 0입니다. 자세한 내용은 stackoverflow.com/a/57802070/334451
Mikko Rantalainen의

9

TL; DR : 잘 작성된 모든 웹 사이트 (/ 앱)는 헤더를 내고이 X-XSS-Protection: 0기능을 잊어 버려야합니다. 더 나은 사용자 에이전트가 제공 할 수있는 추가 보안을 원한다면 엄격한 Content-Security-Policy헤더를 사용하십시오 .

긴 대답 :

HTTP 헤더 X-XSS-Protection 는 Microsoft가 Internet Explorer 8.0 (MSIE 8)에서 도입하여 잘못 작성된 웹 사이트의 보안을 향상시키기 위해 도입 한 것 중 하나입니다.

아이디어는 리플렉션 XSS 공격을 탐지하고 자동으로 공격을 중립화하기 위해 일종의 휴리스틱을 적용하는 것입니다.

이것의 문제적인 부분은 "휴리스틱"과 "중성"입니다. 휴리스틱은 오탐 (false positive)을 유발하고 중성화는 구현에 사용될 수있는 부작용을 유발하므로 안전하게 수행 할 수 없습니다. 하고 완벽하게 안전한 웹 사이트에서 XSS 공격 및 DoS 공격 .

나쁜 점은 웹 사이트가 헤더 X-XSS-Protection를 방출하지 않으면 브라우저가 헤더처럼 작동한다는 것입니다X-XSS-Protection: 1 가 방출 된 입니다. 더 나쁜 것은이 값이이 헤더에 가능한 모든 값 중 가장 안전하지 않다는 것입니다!

지정된 보안 웹 사이트 (즉, 사이트에 리플렉션 XSS 취약점이 없음)에 대해이 "XSS 보호"기능 다음과 같은 공격을 허용합니다 .

X-XSS-Protection: 1공격자가 JavaScript의 일부를 선택적으로 차단하고 나머지 스크립트는 계속 실행하도록합니다. 이것은이 기능의 휴리스틱 스가 단순히 "페이지 소스의 스크립팅 부분에서 GET 매개 변수의 값을 찾은 경우 사용자 에이전트에 따라 스크립트가 자동으로 수정됩니다"이기 때문에 가능합니다. 실제로 침입자는 일반 텍스트 데이터를 실행 가능한 JavaScript 코드로 잘못 전환하는 매개 변수를 추가 할 수 있습니다 .disablexss=<script src="framebuster.js" 있으며 브라우저는 <script src="framebuster.js"실제 페이지 소스에서 문자열 을 자동으로 제거합니다 . 나머지 페이지는 계속 실행되고 공격자는이 페이지 보안 부분을 제거했습니다. 실제로 페이지 소스의 모든 JS를 수정할 수 있습니다. 경우에 따라 콘텐츠가 반영된 XSS 취약점이없는 페이지를 사용하여 중립으로 인해 페이지에서 선택된 JavaScript를 실행할 수 있습니다.

X-XSS-Protection: 1; mode=block공격자가 페이지의 동작을 사이드 채널로 사용하여 페이지 소스에서 데이터를 유출 할 수 있습니다. 예를 들어 페이지에의 행을 따라 JavaScript 코드가 포함 된 경우 var csrf_secret="521231347843"공격자는 단순히 추가 매개 변수를 추가 leak=var%20csrf_secret="3하고 페이지가 차단되지 않은 경우 3첫 번째 숫자가 올바르지 않습니다. 공격자가 이번에 다시 시도 leak=var%20csrf_secret="5하면 페이지로드가 중단됩니다. 이를 통해 공격자는 비밀의 첫 번째 숫자가임을 알 수 있습니다 5. 그런 다음 공격자는 다음 자리를 계속 추측합니다.

결국 사이트에 XSS 리플렉션 공격이 가득 찬 경우 기본값 인 기본값을 사용 1하면 공격 영역이 약간 줄어 듭니다. 그러나 귀하의 사이트가 안전하고을 배출하지 않으면 X-XSS-Protection: 0귀하의 사이트는이 기능을 지원하는 모든 브라우저에 취약합니다. 사이트에서 아직 알려지지 않은 XSS 취약성에 대해 브라우저로부터 심층적 인 방어를 지원하려면 엄격한 Content-Security-Policy헤더를 사용하십시오 . 알려진 취약점에 대해서는 사이트를 열지 않습니다.

현재이 기능은 MSIE, Safari 및 Chrome에서 기본적으로 활성화되어 있습니다. 이전에는 Edge에서 사용하도록 설정되었지만 Microsoft는 이미이 잘못된 기능을 Edge에서 제거했습니다 . Mozilla Firefox는이를 구현하지 않았습니다.

또한보십시오:

https://homakov.blogspot.com/2013/02/hacking-facebook-with-oauth2-and-chrome.html https://blog.innerht.ml/the-misunderstood-x-xss-protection/ http : / /p42.us/ie8xss/Abusing_IE8s_XSS_Filters.pdf https://www.slideshare.net/masatokinugawa/xxn-ko https://bugs.chromium.org/p/chromium/issues/detail?id=396544 https : // bugs.chromium.org/p/chromium/issues/detail?id=498982

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.