HTTP 응답에 적용하면 웹 보안성을 높일 수 있는 응답 헤더를 살펴보겠습니다.
이 헤더는 <frame>
이나 <iframe>
등을 사용하여 웹 페이지가 출력되는 것을 제어하기 위한 헤더입니다. 프레임을 이용하여 웹 페이지가 표시될 수 있는 경우, 클릭재킹(clickjacking)
공격에 노출될 수 있습니다. 클릭재킹 공격은 간단하게 말해서 공격자가 정상적으로 보이는 웹 페이지의 메뉴나 버튼 위에 투명한 레이어를 추가한 것 같이 악성 링크를 보이지 않게 숨겨두고 사용자가 정상적인 기능을 수행하려고 해당 메뉴를 눌렀을 때 그 악성 링크가 클릭되도록 만드는 공격입니다.
이와 같은 공격을 방지하기 위해서 X-Frame-Options 헤더를 사용할 수 있는데 다음과 같은 값을 가질 수 있습니다.
X-Frame-Options: DENY
어떠한 경우에도 프레임 내에서 웹 페이지를 표시하지 않도록 합니다.X-Frame-Options: SAMEORIGIN
같은 도메인 안에서 요청된 웹 페이지로만 프레임으로 표시할 수 있도록 합니다.X-XSS-Protection: 1; mode=block
리플렉티드 XSS 공격이 탐지되었을 때, 웹 페이지가 로딩되는 것을 막아줍니다.
MIME 스니핑을 차단하기 위해 사용하는 헤더입니다. MIME 스니핑은 컨텐츠 스니핑(content sniffing)
이라고도 하는데, 웹 브라우저가 특정 파일을 읽을 때, 파일의 실제 내용과 Content-Type에 설정된 내용이 서로 다르면, 파일의 내용으로부터 파일의 형식을 추측하여 실행하는 것입니다. 편리함을 위해 개발된 웹 브라우저의 기능이지만 공격자에게 악용될 수 있습니다. 만약 공격자가 html 파일의 내용을 png등 이미지 파일로 만들어 업로드 하는 경우를 가정해봅니다. 그 파일을 읽은 사용자의 웹 브라우저는 MIME 스니핑에 의해, 비록 이미지 파일을 요청하더라도, 실제 파일의 내용이 HTML 형식인 것을 보고 HTML 코드를 실행할 수 있습니다. 이 경우 HTML 코드 내에 악성 자바스크립트가 존재한다면, XSS 공격에 당할 수 있는 위험이 있습니다.
X-Content-Type-Options: nosniff
이 헤더를 적용하면 웹 브라우저가 MIME 스니핑을 하지 않도록 만들어 줄 수 있습니다. 이 경우 웹 브라우저는 항상 Content-Type 헤더에 설정된 형식으로만 리소스를 처리하게 됩니다. Content-Type 헤더가 이미지 파일 형식인 경우 이미지 파일로만 처리를 하게 되어, 위에서 언급한 공격을 차단할 수 있습니다.