Defaults.Exposed › 수정 › MIME 스니핑 방지 (X-Content-Type-Options)
MIME 스니핑 방지 (X-Content-Type-Options) 수정 방법
브라우저가 파일의 실제 종류를 추측하지 못하게 하는 한 줄 헤더입니다. 이 설정이 없으면 귀사 사이트에 업로드되거나 귀사 페이지에 있는 파일이 브라우저에 의해 잘못 해석되어 코드로 실행될 수 있습니다. 이것이 바로 일부 공격이 무해해 보이는 업로드를 고객 세션을 탈취하는 방법으로 전환하는 방식입니다.
비즈니스에 미치는 핵심 영향: 이 헤더가 없으면 기본 사항이 완비되지 않았다는 명확하고 스캔 가능한 신호입니다. 단독으로는 사이트를 다운시키는 경우가 거의 없지만, 파일 업로드 양식이나 사용자 생성 콘텐츠와 결합되면 공격자가 방문자의 브라우저에서 악성 코드를 실행하는 경로가 열립니다. 보안에서 가장 저렴한 수정 중 하나입니다: 한 줄, 무료, 약 5분.
발생 가능한 비용
- 고객이나 직원이 파일(아바타, 문서, 지원 첨부 파일, 목록 사진)을 업로드할 수 있는 모든 페이지가 브라우저 측 공격의 발사대가 될 수 있습니다.
- 공격자가 악성 코드를 이미지나 텍스트 파일로 위장해 방문자의 브라우저가 실행하게 할 수 있습니다.
- 보안 설문지, 사이버 보험 검사, 기업 구매자가 이 헤더를 스캔합니다. 없으면 '기본 사항을 하지 않는다'고 읽혀 거래를 지연시키거나 망칠 수 있습니다.
- 이전 브라우저와 일부 통합이 콘텐츠 유형을 '스니핑'하고 신뢰를 손상시키거나 데이터를 누출하는 방식으로 파일을 잘못 처리할 수 있습니다.
중요한 이유. 서버가 파일이 무엇인지 모호할 때 브라우저는 추측("스니핑")합니다. 공격자가 그 추측을 악용합니다: 서버가 무해한 이미지라고 레이블을 붙이지만 실제로는 프로그램 코드인 파일을 업로드합니다. X-Content-Type-Options: nosniff 헤더는 추측을 끄고 서버가 명시한 유형을 신뢰하도록 모든 브라우저에 지시합니다. 채점된 P2 검사로 25점 가치가 있으며 없을 때 중간 심각도로 등급이 매겨집니다.
소유자를 위한 짧은 버전
모든 웹 브라우저에는 조용한 가정이 내장되어 있습니다: 귀사 사이트에서 파일을 다운로드할 때 어떤 종류의 파일인지 파악하려 합니다. 일반적으로 서버를 신뢰합니다. 하지만 서버가 모호하면 브라우저가 추측합니다 — 그것을 MIME 스니핑이라고 합니다.
문제는 공격자가 추측을 게임화할 수 있다는 것입니다. 서버가 진심으로 무해한 이미지라고 믿지만 브라우저가 추측할 때 실제로 프로그램 코드로 판단하는 파일을 만들 수 있습니다 — 그러면 브라우저가 귀사 도메인에서 실행합니다.
추측을 끄는 한 줄 지시가 있습니다: X-Content-Type-Options: nosniff. 모든 브라우저에게 “추측하지 말고 — 서버가 말하는 것을 정확히 신뢰하세요”라고 지시합니다. 이것이 전체 수정입니다. 무료이며 약 5분이 걸리고 올바르게 구성된 사이트에서는 아무것도 깨지지 않습니다.
비즈니스 피해 사례
-
“무해한 첨부 파일”이 실제로는 그렇지 않음. 고객이 파일을 업로드할 수 있는 지원 포털이나 마켓플레이스를 운영합니다. 공격자가 시스템이 이미지로 저장하고 제공하는 파일을 업로드합니다. nosniff 없이 피해자의 브라우저가 실제로는 스크립트라고 추측하고 실행합니다 — 귀사 사이트에서 해당 방문자의 로그인 세션을 조용히 탈취합니다.
-
보안 설문지에서 지연된 거래. 더 큰 고객사의 구매 팀이 서명 전 귀사 사이트의 자동화된 스캔을 실행합니다. 없는 보안 헤더가 즉시 나타납니다.
-
더 어려워지는 사이버 보험 갱신. 더 많은 보험사들이 이제 견적이나 갱신 전에 외부 스캔을 실행합니다.
-
되돌리기 어려운 평판 타격. 세션 하이재킹 사고가 귀사 도메인에서 제공되는 파일로 추적되면, 이야기는 “모호한 헤더가 없었다”가 아니라 “[귀사 비즈니스] 고객 계정 유출”이 됩니다.
실제 작동 방식
브라우저가 파일을 수신하면 서버가 콘텐츠 유형(예: 이미지에 image/png, 웹 페이지에 text/html)으로 레이블을 붙여야 합니다. 역사적으로 브라우저는 서버가 잘못될 수 있다는 이유로 완전히 신뢰하지 않아 파일의 실제 바이트를 확인하고 직접 결정했습니다. 그것이 MIME 스니핑입니다.
X-Content-Type-Options: nosniff는 추측을 완전히 제거합니다. 설정하면 브라우저에게 서버가 선언한 유형만을 사용하도록 지시합니다.
좋은 상태는: 귀사 사이트의 모든 응답 — 페이지와 자산 모두 — 이 정확히 이 헤더를 가지고 있는 것입니다:
X-Content-Type-Options: nosniff
수정 방법 (무료, 약 5분)
웹사이트를 담당하는 사람에게 이 섹션을 전달하세요 — 수정은 무료이며 빠릅니다.
Cloudflare(또는 유사한 CDN/프록시):
- 응답 헤더 변환 규칙(규칙 → Transform 규칙 → 응답 헤더 수정)을 사용해
X-Content-Type-Options를nosniff로 설정합니다.
Nginx:
add_header X-Content-Type-Options "nosniff" always;
Apache:
Header always set X-Content-Type-Options "nosniff"
IIS / Windows 호스팅:
<httpProtocol>
<customHeaders>
<add name="X-Content-Type-Options" value="nosniff" />
</customHeaders>
</httpProtocol>
Node / Express:
app.use((req, res, next) => {
res.setHeader('X-Content-Type-Options', 'nosniff');
next();
});
(또는 기본적으로 이것과 여러 다른 보안 헤더를 설정하는 helmet 패키지 사용.)
흔한 실수
- 홈페이지에만 설정. 헤더는 모든 응답에 있어야 합니다 — 이미지, 스크립트, 스타일시트, 업로드된 파일 포함.
- 값 오타. 유일한 유효 값은
nosniff입니다. 다른 것은 검사에 실패하고 보호를 제공하지 않습니다. - 콘텐츠 보안 정책을 대체한다고 가정. nosniff는 하나의 레이어입니다. 어떤 스크립트가 실행되도록 허용되는지 제어하지 않습니다.
- “중복” 제거. CDN과 원본 모두 설정하면 두 번 보게 됩니다. 이것은 무해합니다 — 하나를 제거하는 데 시간을 낭비하지 마세요.
- 비용을 지불. 무료 구성 변경입니다.
IT 담당자에게 전달하세요
기술 요약: 이 검사는 HTTP 응답 헤더를 검사하고 X-Content-Type-Options가 있고 (대소문자 구분 없이) 값에 nosniff가 포함될 때 통과합니다. CDN과 원본 모두 설정하여 nosniff, nosniff 다중 소스 케이스 포함. 없거나 nosniff가 아닌 값은 실패. OWASP Top 10 A05(보안 구성 오류)에 매핑되는 채점된 P2 검사로 25점 가치. 모든 응답에 범위를 적용하기 위해 엣지(CDN)에서 설정하거나 오류 응답에도 발행되도록 always 시맨틱으로 웹 서버에서 설정하세요.
FAQ
파일 업로드를 허용하지 않습니다. 그래도 이것이 필요한가요?
그렇습니다. 헤더는 심층 방어입니다: 또한 브라우저가 귀사 자체 사이트에서 제공되는 스크립트, 스타일시트, 데이터 파일을 잘못 읽는 것을 방지하여 업로드 양식이 없는 사이트에서도 여러 크로스 사이트 스크립팅 트릭을 방지합니다.
이것을 추가하면 웹사이트가 손상되나요?
거의 절대 아닙니다. nosniff는 단순히 브라우저가 서버가 이미 보내는 콘텐츠 유형을 존중하게 합니다. 문제가 발생한다면 nosniff가 원인이 아니라 서버가 파일을 잘못 레이블하는 실제 버그를 노출시킨 것입니다.
'좋은' 설정이 실제로 어떤 것인가요?
모든 페이지와 자산에 단일 응답 헤더: X-Content-Type-Options: nosniff. 다른 유효한 값도 없고 조정도 없습니다.
CDN(Cloudflare 등)과 서버 모두 이것을 추가하면 문제가 되나요?
아닙니다. 두 배 보기("nosniff, nosniff")는 완전히 괜찮으며 통과합니다.
수정하는 데 비용이 드나요?
아닙니다. 웹 서버나 CDN의 한 줄 무료 구성입니다. 단일 헤더를 추가하는 데 비용을 청구하는 사람은 과잉 청구입니다.
이것이 콘텐츠 보안 정책(CSP)과 어떻게 다른가요?
서로 보완적입니다. CSP는 어떤 스크립트와 리소스가 로드되도록 허용되는지 제어합니다. nosniff는 브라우저가 로드하는 파일을 잘못 분류하지 않게 합니다. 둘 다 원합니다.