보안 헤더는 브라우저에서 보안 제어를 각각 적용하는 웹 서버에서 설정할 수 있는 HTTP 응답 헤더의 하위 집합입니다. HTTP 헤더는 웹 요청 및 응답과 함께 전송되는 메타데이터 형식입니다. 보안 헤더 "X-Content-Type-Options"는 브라우저가 MIME 스니핑을 수행하는 것을 방지합니다.
참고: HTTP 헤더는 HTTP 전용이 아니며 HTTPS에서도 사용됩니다.
MIME 스니핑이란 무엇입니까?
데이터가 웹을 통해 전송될 때 포함된 메타데이터 중 하나는 MIME 유형입니다. Multipurpose Internet Mail Extensions 또는 MIME 유형은 파일 처리 방법을 나타내는 파일에 포함된 데이터 유형을 정의하는 데 사용되는 표준입니다. 일반적으로 MIME 유형은 선택적 매개변수 및 값이 있는 유형 및 하위 유형으로 구성됩니다. 예를 들어, UTF-8 텍스트 파일의 MIME 유형은 "text/plain; 문자 집합=UTF-8”. 이 예에서 유형은 "텍스트", 하위 유형은 "일반", 매개변수는 "문자 집합", 값은 "UTF-8"입니다.
파일의 잘못된 레이블 지정 및 잘못된 취급을 방지하기 위해 웹 서버는 일반적으로 MIME 스니핑을 수행합니다. 명시적으로 명시된 MIME 형식을 무시하고 대신 파일의 시작 부분을 분석하는 과정이다. 대부분의 파일 유형에는 파일 유형을 나타내는 헤더 시퀀스가 포함됩니다. 대부분의 경우 MIME 유형이 정확하고 파일을 스니핑해도 차이가 없습니다. 차이점이 있는 경우 웹 서버는 선언된 MIME 유형이 아닌 파일을 처리하는 방법을 결정하기 위해 스니핑된 파일 유형을 사용합니다.
공격자가 PNG 이미지와 같은 파일을 업로드할 수 있지만 파일이 실제로 JavaScript 코드와 같은 다른 파일인 경우 문제가 발생합니다. 두 가지 텍스트 유형과 같은 유사한 파일 유형의 경우 이것이 너무 많은 문제를 일으키지 않을 수 있습니다. 그러나 완벽하게 무해한 파일을 대신 실행할 수 있다면 심각한 문제가 됩니다.
X-Content-Type-Options의 기능은 무엇입니까?
X-Content-Type-Options 헤더에는 "X-Content-Type-Options: nosniff" 값이 하나만 있습니다. 활성화하면 사용자의 브라우저에 MIME 유형 스니핑을 수행하지 않고 대신 명시적으로 선언된 값에 의존해야 함을 알립니다. 이 설정이 없으면 악성 자바스크립트 파일이 PNG 등의 이미지로 위장한 경우 자바스크립트 파일이 실행된다. X-Content-Type-Options를 활성화하면 파일이 유효한 이미지 형식이 아니기 때문에 로드에 실패한 이미지로 처리됩니다.
X-Content-Type-Options는 악의적인 파일이 실수로 제공될 가능성이 없기 때문에 전적으로 자사 리소스를 사용하는 웹 사이트에서는 특별히 필요하지 않습니다. 웹 사이트가 외부 또는 사용자 제출 리소스와 같은 타사 콘텐츠를 사용하는 경우 X-Content-Type-Options는 이러한 유형의 공격에 대한 보호 기능을 제공합니다.