• Kali Linux 2024.2 설치 (VMware Fusion, Apple Silicon) •
• 웹 해킹 훈련장 172.16.15.116 40080/tcp 대상 공개용 도구 기반의 홈페이지 취약점 점검 실습 (20200507)
• Kali Linux 2020.1b 64bit 설치 설명서 (MS 윈도우 10, VMware 플레이어) (20200325)
• VirtualBox 가상머신으로 GSM CE 6.0.2 설치 설명서 (OpenVAS) (20200125)
• Kali Linux 2019.4 64bit Light 배포판 설치 설명서 (권장) (20191202)
• Kali Linux 2019.3 64bit Large 배포판 설치 및 한글 설정 설명서 (20191129)
• [과제] WH-MissAuth-1 웹해킹훈련장: 접속자 권한인증 후 출력 제어 취약점 (20180619)
• [과제] WH-WebEditor-SE2 웹해킹훈련장: 취약한 PHP 버전에서 원래 파일이름을 저장하는 웹에디터의 취약점을 이용한 시스템 침투 (20170827)
• [과제] WH-FILEDOWN-01 웹해킹훈련장: 파일다운로드로 서버침투 (20170810)
• [과제] WH-COOKIE-02 웹해킹훈련장: 쿠키 오용 취약점 (20170809)
• Apache Tomcat /manager/html 무작위대입공격 도구 작성 - PHP (20170721)
• 칼리 리눅스를 이용한 From SQL Injection to Shell 공략 (20170404)
• 단순한 방어법(../ 제거)의 파일 다운로드 취약점 진단 사례 (20170329)
• WH-WebEditor-CH 라이브 ISO: 이미지 검증 기능을 우회하여 PHP 웹쉘 생성 (20170130)
• 오늘의 웹서버 공격 로그: MySQL 관리 인터페이스 자동탐색 도구 - Jorgee Scanner (20170125)
• WH-WebEditor-GM 라이브 ISO: 이미지 검증 기능을 우회하여 PHP 웹쉘 생성 (20170123)
• 오늘의 웹서버 공격 로그: Apache ProxyAbuse 탐지 시도 (20170122)
• 오늘의 웹서버 공격 로그: Bash 쉘쇼크 취약점을 이용한 Perl Ircbot 삽입 시도 (20170122)
• 오늘의 웹서버 공격 로그: phpMyAdmin 취약점 자동탐색 도구 - ZmEu Scanner (20170121)
• 오늘의 웹서버 공격 로그: 워드프레스 취약점 자동탐색 도구 (20170118)
• WH-PathTrav-01 라이브 ISO: 파일 다운로드 취약점으로 서버 침투 (20170116)
• WH-Webshell-Loc-01 라이브 ISO: 서버 내 웹쉘 저장경로 알아내기 (20170114)
• WH-ImgShell-01 라이브 ISO: 이미지에 덧붙인 웹쉘 취약점 웹해킹훈련장 (20170113)
• SSH 무작위 대입 공격으로 root권한을 탈취한 침해사고 사례 (20170112)
• WH-IllInst-WordPress 워드프레스 웹해킹훈련장 소개 (20170110)
• WH-IllInst-WordPress 워드프레스 웹해킹훈련장 실습 설명서 (20170110)
• MSSQL과 MySQL의 SQL구문삽입을 이용한 OS 명령어 실행 (20170109)
• WH-CommInj-01 원격 운영체제 명령어 삽입 취약점 훈련장(라이브 ISO) 소개 및 실습 설명서 (20170106)
• WH-Deface-01 기능별 권한인증 취약점 훈련장(라이브 ISO) 소개 (20170104)
• WH-Deface-01 웹해킹훈련장 실습 설명서 (20170104)
• WH-Account-01 회원가입 취약점 훈련장(라이브 ISO) 소개 (20170102)
• WH-Account-01 웹해킹훈련장 실습 설명서 (20170103)
• WH-Account-02 회원정보수정 취약점 훈련장(라이브 ISO) 소개 (20170103)
• WH-Account-02 웹해킹훈련장 실습 설명서 (20170104)
• 저장형 XSS 공격을 이용한 홈페이지위변조 공격 사례 (20161231)
• 로그인한 상태에서 웹취약점스캐너의 자동점검 위험성 (20161228)
• DBMS Fingerprinting (데이터베이스 관리시스템 탐지) (20161222)
• FCKeditor를 대상으로 한 자동화 공격툴의 침해사례 (20161220)
• 이중 서버스크립트 혼용을 이용한 웹방화벽/확장자검증 우회 (실제 사례) (20161219)
• HTTP/HTTPS 혼용에 따른 관리자로그인 페이지 접근 우회 (실제 사례) (20161214)
• 경로재지정 취약점: 자바스크립트를 이용한 검증과 그 우회, 그리고 XSS (실제 사례) (20161214)
• 웹해킹 사례: 유명 홈페이지를 악성코드 배포 경유지로... (20161213)
• HTML 삽입, XSS 공격 탐지방법 (20161211)
• 오늘의 웹서버 공격 로그, Axis2, 공개프록시 (20161210)
• 오늘의 웹서버 공격 로그, XML-RPC, Open Proxy (20161208)
• nikto와 owasp-zap 연동 (20161206)
• 미라이 IoT DDoS 봇넷이 사용한 61개 비밀번호 (20161205)
• 오늘의 웹서버 공격 로그, SOAP 원격코드실행, D-Link 명령어 삽입, muieblackcat (20161205)
• 오늘의 웹서버 공격 로그, w00tw00t (DFind) (20161204)
• 기억하기 쉽고 안전한 비밀번호 만들기 (20161203)
• 2016.12.01-02 웹서버 공격 로그, armgg DDoS 악성코드 (20161202)
• KISA의 랜섬웨어 예방 수칙 (20161202)
• WH-DVWA-1.9 Damn Vulnerable Web App 웹해킹훈련장 (20161201)
• DVWA Brute Force 실습 설명서 (20161205)
• DVWA Command Injection 실습 설명서 (20161207)
• DVWA CSRF (low, high level) 실습 설명서 (20161208)
• DVWA File Inclusion 실습 설명서 (20161215)
• DVWA File Upload 실습 설명서 (20161221)
• DVWA SQL Injection (low, medium, high level) 실습 설명서 (20161224)
• DVWA SQL Injection medium level - OWASP-ZAP과 sqlmap 실습 설명서 (20161222)
• DVWA Blind SQLi (high level) 수동점검을 통한 '눈먼'SQL 구문삽입의 이해 (20161227)
• DVWA Blind SQL Injection (low, medium level) sqlmap 실습 설명서 (20161226)
• DVWA Reflected Cross Site Scripting (XSS) 실습 설명서 (20161227)
• DVWA Stored Cross Site Scripting (XSS) 실습 설명서 (20170101)
• SVG 이미지의 ECMAscript를 이용한 악성코드 배포 (20161201)
• WH-WebGoat-7.0.1 웹해킹훈련장 라이브 ISO (20161130)
• WebGoat: Bypass a Path Based Access Control Scheme (20161207)
• WebGoat, LAB: DOM-Based cross-site scripting (20161208)
• WebGoat, Authentication Flaws: Multi Level Login 2 (20161209)
• WebGoat, Code Quality: Discover Clues in the HTML (20161210)
• WebGoat XSS: Phishing with XSS (20161211)
• WebGoat: OS Command Injection (20161215)
• WebGoat: Numeric SQL Injection (20161216)
• WebGoat: String SQL Injection (UNION기반 SQL 구문삽입의 이해) (20161217)
• WebGoat: Blind Numeric SQL Injection (추리기반 SQL 구문삽입의 이해) (20161218)
• 2016.11.30 웹서버 공격 로그 (20161130)
• OWASP TOP 10 (2013) 문서의 각종 해킹 시나리오 모음 (20161129)
• WH-LFI-01: 널바이트삽입과 내부파일실행 웹해킹훈련장 (20161126)
• WH-LFI-01 웹해킹훈련장의 취약점 분석 결과보고서 (20161128)
• 인터넷(Internet)과 보안에 대해 짧게 생각해보다 (20161125)
• PHP Easter Egg의 이해와 조치방안 (20161125)
• WH-COOKIE-01: 잘못된 쿠키 사용 사례를 보여주는 웹해킹훈련장 (20161124)
• WH-COOKIE-01 웹해킹훈련장 홈페이지 취약점분석 결과보고서 (20161126)
• 웹해킹 공격/방어 일람 (20161121)
• webhack.dynu.net 문자배너 만들기 - toilet (20161121)
• MIME 형식의 보안위협 완화: X-Content-Type-Options 헤더 (20161120)
• X-XSS-Protection헤더 시험 페이지 (20161119)
• 방화벽을 노리는 블랙너스(Black Nurse) DoS 공격 (20161118)
• 클릭재킹 방지를 위한 X-Frame-Options 헤더 (20161117)
• X-Frame-Options헤더 시험 페이지 (20161118)
• 공시생 성적조작 사건, 물리보안과 정보보안 (20161117)
• ID/PW 평문전송, 정말 그렇게 큰 취약점인가? (20161116)
• [웹해킹훈련장] 취약한 비밀번호: WH-weak-root-pw 실습 설명서 (20161116)
• weak-root-pw 훈련장 웹취약점 분석 보고서 (20161117)
• 슬리타즈 리눅스 4.0 설치와 웹해킹훈련장 Live ISO 만들기 (20161115)
• 버추얼박스 가상머신에서 Tails OS 설치 (20161114)
• Kali Linux에 Tor Browser 설치하기 (20161114)
• 인터넷익명성 - VPN과 Tor (20161114)
• Kali Linux, open-vm-tools, Shared Folder (20161113)
• SSL Strip 공격과 HSTS (20161112)
• 모든 꼬리표 모아보기(태그 클라우드) (20161111)
• HTTP 세션 탈취와 IP보안 (20161111)
• HTTP TRACE method와 XST 공격 (20161111)
• 세션쿠키와 HttpOnly (20161110)
• HTTP 메소드 수동점검 방법 (20161110)
• 파일업로드(웹쉘) 방어하기 (20161109)
• 파일다운로드/경로조작 방어하기 (20161109)
• XSS, SQL Injection 방어하기 (20161109)
• 길찾기(sitemap) (20161109)
• 웹취약성분석 관련 파일 목록 (20161108)
• SQL 인젝션 공격도구 sqlmap의 간단한 사용법 (20161107)
• 웹취약점 분석 도구로서의 THC Hydra (20161107)
• 웹취약점 분석 도구로서의 cURL (20161107)
• [웹해킹훈련장] CVE-2014-6271: Bash Shellshock 실습 설명서 (20161104)
• [PentesterLab] CVE-2014-6271 Shellshock 훈련장 웹취약점 분석 보고서 (20161106)
• 무료 웹해킹 교육장 목록 (20161103)
• 칼리 리눅스(Kali Linux) 설치 (20161030)
• 가상머신 버추얼 박스(VirtualBox) 설치 (20161029)
• 가상머신 VMWare Workstation Player 설치 (20161028)
• [웹해킹훈련장] Drunk Admin Web Hacking Challenge 실습 설명서 (20161027)
• 스마트에디터(SmartEditor) 2.0 Basic의 웹쉘 업로드 취약점 (20160719)
|
|
#X-Content-Type-Options
#nosniff
#HTTP 헤더
#Content-Type 헤더
#MIME Type
#MIME형식
#시험페이지
#자바스크립트 파일 삽입 방어
MIME형식 해석 제한... X-Content-Type-Options: nosniff 헤더
Microsoft에서 제안하는 확장 헤더이며 웹서버가 보내는 MIME 형식 이외의 형식으로 해석을 확장하는 것을
제한하는 크로스사이트스크립트 방어법이다.
MS Internet Explorer 9부터 지원한다.
의미는 간단하다.
CSS MIME 형식("text/css ")을 가지지 않는 파일은 웹 브라우저가 CSS로 사용하지 않아야 한다.
JavaScript MIME 형식("text/javascript " 또는 "application/javascript ")을
가져야만 JavaScript로 해석해야 한다는 의미이다.
따라서 이 방어법은 브라우저 의존적이다.
글을 쓰는 현재 확인한 결과, 구글크롬(Google Chrome), MS IE 11, MS 엣지(MS Edge)는 지원하였고
파이어폭스(FireFox)와 사파리(Safari)는 지원하지 않았다.
참고할만한 바깥고리
웹서버가 설정해서 전송하는 Content-Type 헤더
웹서버는 HTTP 응답에 Content-Type: 헤더를 선언하여 자신이 보내는 내용이 어떠한 용도로
사용될 수 있는 지를 지정한다.
이 헤더에는 MIME(Multipurpose Internet Mail Extensions) 형식이 사용된다.
영어 이름에서 알 수 있듯이 원래는 메일 전송시 사용하던 인코딩 방식이다.
웹서버는 일반적으로 HTML 전송시에는 "text/html "이라는 MIME 형식으로 보낸다.
그외의 경우에는 대개 접근하는 파일의 확장자에 의해서 MIME 형식이 결정된다.
예를 들어 JPG 이미지는 "image/jpeg ",
CSS 파일은 "text/css ", MPG 파일은 "video/mpeg " 등과 같다.
확장자가 기존 MIME 형식에 정의되어 있지 않을 경우에는
텍스트 문서이면 "text/plain "이
이진 파일이면 "application/octet-stream "을 사용한다.
root@kali:~# curl -I http://www.daum.net/
HTTP/1.1 200 OK
X-UA-Compatible: IE=10
Expires: Sat, 01, Jan 1970 22:00:00 GMT
Pragma: no-cache
Cache-Control: no-cache, no-store, must-revalidate
P3P: CP="ALL DSP COR MON LAW IVDi HIS IVAi DELi SAMi OUR LEG PHY UNI ONL DEM STA INT NAV PUR FIN OTC GOV"
Content-Type: text/html;charset=UTF-8
Content-Language: en-US
X-UA-Device-Type: pc
Date: Sun, 20 Nov 2016 15:55:40 GMT
Connection: keep-alive
root@kali:~#
위의 예는 일반적인 웹 접속시 볼 수 있는 "Content-Type: text/html " 헤더이다.
다음(Daum) 웹서버는 "charset=UTF-8"을 덧붙여서 문자 인코딩 방식이 UTF-8이라는 것을 함께 지정하고 있다.
root@kali:~# curl -v http://search.daum.net/OpenSearch.xml
* Trying 180.70.134.60...
* Connected to search.daum.net (180.70.134.60) port 80 (#0)
> GET /OpenSearch.xml HTTP/1.1
> Host: search.daum.net
> User-Agent: curl/7.50.1
> Accept: */*
>
< HTTP/1.1 200 OK
< Date: Sun, 20 Nov 2016 13:34:28 GMT
< Server: Apache
< Last-Modified: Wed, 16 Nov 2016 07:25:54 GMT
< Accept-Ranges: bytes
< Content-Length: 716
< Vary: Accept-Encoding
< Connection: close
< Content-Type: application/xml
<
<?xml version="1.0" encoding="UTF-8"?>
<OpenSearchDescription xmlns="http://a9.com/-/spec/opensearch/1.1/" xmlns:referrer="http://a9.com/-/opensearch/extensions/referrer/1.0/">
<ShortName>Daum</ShortName>
<Description>Kakao Corp provider</Description>
<Url template="http://search.daum.net/search?w=tot&DA=JU1&ie={inputEncoding}&src={referrer:source?}&q={searchTerms}" type="text/html"/>
<Url template="http://suggest.search.daum.net/sushi/opensearch/pc?q={searchTerms}&DA=JU2" type="application/x-suggestions+json"/>
<InputEncoding>UTF-8</InputEncoding>
<Image height="16" type="image/x-icon" width="16">http://search.daum.net/favicon.ico</Image>
* Closing connection 0
</OpenSearchDescription>l;root@kali:~#
위의 사례에서 .xml 확장자 파일을 접근했을 때는 웹서버가 "application/xml "라는
MIME 형식을 전송하였다.
root@kali:~# curl -I http://lithium.daum.net/resources/external/top/trendad.min.js
HTTP/1.1 200 OK
Date: Sun, 20 Nov 2016 13:43:15 GMT
Server: Apache
Accept-Ranges: bytes
ETag: W/"664-1476342908000"
Last-Modified: Thu, 13 Oct 2016 07:15:08 GMT
Content-Length: 664
Connection: close
Content-Type: application/javascript
root@kali:~#
위의 사례에서 .js 확장자 파일을 접근했을 때는 웹서버가 "application/javascript "라는
MIME 형식을 전송하였다.
일반적으로는 "text/javascript "로 보내는 경우가 더 많다.
root@kali:~# curl -I http://img.naver.net/static/www/u/2013/0731/nmms_224940510.gif
HTTP/1.1 200 OK
Server: Testa/4.8.6
Last-Modified: Wed, 31 Jul 2013 13:49:47 GMT
Accept-Ranges: bytes
Content-Length: 4368
Access-Control-Allow-Origin: *
Content-Type: image/gif
Cache-Control: max-age=26414865
Expires: Fri, 22 Sep 2017 07:32:42 GMT
Date: Sun, 20 Nov 2016 14:04:57 GMT
Connection: keep-alive
root@kali:~#
.gif 확장자를 가지는 파일은 웹서버가 "image/gif "라는 마임형식으로 응답한다.
MIME 형식의 엄격한 적용을 통한 보안위협 완화
웹서버가 보내는 MIME 형식을 이용하여 일부 보안 수준을 높이려는 시도가 바로
X-Content-Type-Options: sniff 헤더이다.
이 HTTP 헤더가 선언되면 - 지원하는 웹 브라우저의 경우에는 -
지정된 MIME형식 이외의 다른 용도로 사용하고자 하는 것을 차단한다.
예를 들어보자.
어떤 공격자가 .jpg 확장자의 파일을 웹 서버에 업로드했다고 하자 -
실제로 이 파일은 JPEG 이미지가 아니라 내용은 자바스크립트르 담고 있다.
이 파일을 웹브라우저로 접근하면 웹서버는 확장자가 jpg 이므로
image/jpeg 라는 MIME 타입을 반환한다.
공격자가 이 이미지 파일을 자바스크립트로 사용하려고 할 때 웹서버가
X-Content-Type-Options: sniff 헤더를 함께 전송하면
웹브라우저는 이 파일의 MIME 형식이 text/javascript 나 application/javascript 가
아니므로 자바스크립트 실행을 차단한다.
CSS에서도 JavaScript를 실행할 수 있으므로 사용자가 업로드한 파일이 .css 확장자가 아니면
CSS로 적용하는 것도 차단한다 - 따라서 첨부파일 업로드에서 업로드를 허용할 확장자 목록에
css 가 포함되면 안된다.
X-Content-Type-Options 헤더 시험
웹핵누리집의 파일 다운로드 기능에 X-Content-Type-Options: nosniff 헤더를
켜고 끌 수 있도록 하였다.
GET 변수 nosniff=off 이면
X-Content-Type-Options: nosniff 헤더를 전송하지 않는다.
시험에 사용할 예제 파일인 20161120-fake-jpg-real-js.jpg 파일은 다음과 같은 내용을 담고 있다.
확장자만 jpg 이고 실제 내용은 자바스크립트이다.
document.write('X-Content-Type-Options: nosniff 헤더가 선언되지 않으면 첨부파일을 자바스크립트로 실행할 수 있습니다.');
curl 명령어를 사용하여
X-Content-Type-Options: nosniff 헤더를 활성화 시켰을 때와 비활성화 시켰을 때의
통신 내용을 살펴보자.
root@kali:~# curl -v "http://webhack.dynu.net/?down=20161120-fake-jpg-real-js.jpg&nosniff=on"
* Trying 122.32.19.138...
* Connected to webhack.dynu.net (122.32.19.138) port 80 (#0)
> GET /?down=20161120-fake-jpg-real-js.jpg&nosniff=on HTTP/1.1
> Host: webhack.dynu.net
> User-Agent: curl/7.49.1
> Accept: */*
>
< HTTP/1.1 200 OK
< Date: Sun, 20 Nov 2016 15:14:48 GMT
< Server: Apache
< Set-Cookie: NormalCookie=Not-HttpOnly-Cookie
< Set-Cookie: HttpOnlyCookie=HttpOnly-Cookie; httponly
< X-Frame-Options: DENY
< X-XSS-Protection: 1
< X-Content-Type-Options: nosniff
< Content-Description: File Transfer
< Content-Disposition: attachment; filename="20161120-fake-jpg-real-js.jpg"
< Expires: 0
< Cache-Control: must-revalidate
< Pragma: public
< Content-Length: 150
< Content-Type: application/octet-stream
<
document.write('X-Content-Type-Options: nosniff 헤더가 선언되지 않으면 첨부파일을 자바스크립트로 실행할 수 있습니다.');
* Connection #0 to host webhack.dynu.net left intact
root@kali:~#
위는 X-Content-Type-Options: nosniff 헤더를 활성화시켰을 때의 통신내용이다.
파일 다운로드에서 URL 매개변수에 nosniff=on 를 추가하면 - 실제로는 일상시에 -
아파치 웹서버가 X-Content-Type-Options: nosniff 헤더를 전송한다.
root@kali:~# curl -v "http://webhack.dynu.net/?down=20161120-fake-jpg-real-js.jpg&nosniff=off"
* Trying 122.32.19.138...
* Connected to webhack.dynu.net (122.32.19.138) port 80 (#0)
> GET /?down=20161120-fake-jpg-real-js.jpg&nosniff=off HTTP/1.1
> Host: webhack.dynu.net
> User-Agent: curl/7.49.1
> Accept: */*
>
< HTTP/1.1 200 OK
< Date: Sun, 20 Nov 2016 15:13:35 GMT
< Server: Apache
< Set-Cookie: NormalCookie=Not-HttpOnly-Cookie
< Set-Cookie: HttpOnlyCookie=HttpOnly-Cookie; httponly
< X-Frame-Options: DENY
< X-XSS-Protection: 1
< Content-Description: File Transfer
< Content-Disposition: attachment; filename="20161120-fake-jpg-real-js.jpg"
< Expires: 0
< Cache-Control: must-revalidate
< Pragma: public
< Content-Length: 150
< Content-Type: application/octet-stream
<
document.write('X-Content-Type-Options: nosniff 헤더가 선언되지 않으면 첨부파일을 자바스크립트로 실행할 수 있습니다.');
* Connection #0 to host webhack.dynu.net left intact
root@kali:~#
위는 X-Content-Type-Options: nosniff 헤더를 비활성화시켰을 때의 통신내용이다.
파일 다운로드에서 URL 매개변수에 nosniff=off 를 추가하면
웹서버가 X-Content-Type-Options: nosniff 헤더를 전송하지 않는다.
가짜 JPG 파일의 JavaScript 실행여부 검사
가짜로 만든 JPG 파일과 X-Content-Type-Options: nosniff 헤더 선언 여부에 따라
웹브라우저가 자바스크립트를 어떻게 처리하는 지 살펴보자.
현재 당신이 접속한 웹브라우저는 "Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; ClaudeBot/1.0; +claudebot@anthropic.com) "이다.
[X-Content-Type-Options 헤더가 없을 때]
- HTML:
<script type="text/javascript" src="/?down=20161120-fake-jpg-real-js.jpg&nosniff=off"></script>
- 자바스크립트 실행 결과:
[X-Content-Type-Options 헤더가 있을 때]
- HTML:
<script type="text/javascript" src="/?down=20161120-fake-jpg-real-js.jpg&nosniff=on"></script>
- 자바스크립트 실행 결과:
X-Content-Type-Options 헤더를 지원하는 웹 브라우저의 경우에는 자바스크립트 실행결과가 달라야 한다.
미설정시에는 자바스크립트가 "X-Content-Type-Options: nosniff 헤더가 선언되지 않으면 첨부파일을 자바스크립트로 실행할 수 있습니다. "라는 문자열을 출력한다. 설정 시에는 이 문자열이 출력되지 않는다.
X-Content-Type-Options 헤더를 지원하지 않는 웹 브라우저의 경우에는 자바스크립트 실행결과가 동일하게
"X-Content-Type-Options: nosniff 헤더가 선언되지 않으면 첨부파일을 자바스크립트로 실행할 수 있습니다. "라는 문자열을 출력한다.
이미지 파일에 대한 X-Content-Type-Options 헤더가 미치는 영향
X-Content-Type-Options 헤더는 크로스사이트스크립트 실행을 방지하기 위한 목적으로 제안되었다.
자바스크립트를 실행할 수 있는 text/javascript , text/css 등의 MIME 형식에 대해
사용될 것으로 예상할 수 있다.
실제 이미지 파일을 application/octet-stream MIME 형식으로 보냈을 때 이미지가 표시되는 지
살펴보자.
[ ↑ <img src="/?down=20161120-real-jpg.jpg&nosniff=off"> ]
[ ↑ <img src="/?down=20161120-real-jpg.jpg&nosniff=on"> ]
아마도 어떤 웹 브라우저를 쓰더라도 두 경우에 대해서 모두 "광화문과 해태상" 이미지가 출력될 것이다.
이는 X-Content-Type-Options 헤더가 설정되어 있더라도
"application/octet-stream " 마임형식을 "image/* " 마임형식으로 전용해서
쓰는 것을 허용한다는 뜻이다.
좀더 정확하게는 - 아마도 - 크롬이나 파이어폭스 등의 웹 브라우저는 실제 사용하고자 하는 마임형식이
"*/javascript ", "*/css "인 경우에만 X-Content-Type-Options 헤더를
검사할 겻으로 추정해볼 수 있다.
위에서 출력한 이미지의 HTTP 헤더를 보고자 할 경우에는 다음 명령어를 사용하면 확인할 수 있다.
curl -I "http://webhack.dynu.net/?down=20161120-real-jpg.jpg&nosniff=off"
curl -I "http://webhack.dynu.net/?down=20161120-real-jpg.jpg&nosniff=on"
X-Content-Type-Options 헤더 설정방법
[Apache 웹서버]
Apache 설정 파일에 다음 한줄을 추가하고 재기동한다.
Header set X-Content-Type-Options nosniff
[NginX 웹서버]
NginX 설정 파일에 다음 한줄을 추가하고 재기동한다.
add_header X-Content-Type-Options nosniff;
[Apache Tomcat WAS]
public class SampleResponseFilter implements Filter {
@Override
public void destroy() { }
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException
{
HttpServletRequest req = (HttpServletRequest) request;
HttpServletResponse res = (HttpServletResponse) response;
// Protection against Type 1 Reflected XSS attacks
res.addHeader("X-XSS-Protection", "1; mode=block");
// Disabling browsers to perform risky mime sniffing
res.addHeader("X-Content-Type-Options", "nosniff");
chain.doFilter(req,res);
}
@Override
public void init(FilterConfig filterConfig) throws ServletException { }
}
[Apache Tomcat 8 WAS]
Tomcat 8에서는 web.xml 파일에 다음과 같이 추가한다.
<filter>
<filter-name>HeaderSecurityFilter</filter-name>
<filter-class>org.apache.catalina.filters.HttpHeaderSecurityFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>HeaderSecurityFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
[처음 작성한 날: 2016.11.20]
[마지막으로 고친 날: 2016.11.21]
> 이 글을 목록없이 인쇄하기 편하게 보기
< 이전 글 : webhack.dynu.net 문자배너 만들기 - toilet (2016.11.21)
> 다음 글 : X-XSS-Protection헤더 시험 페이지 (2016.11.19)
이 저작물은 크리에이티브
커먼즈 저작자표시 4.0 국제 라이선스에 따라 이용할 수 있습니다.
잘못된 내용, 오탈자 및 기타 문의사항은 j1n5uk{at}daum.net으로 연락주시기 바랍니다.
|