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