Sec-Fetch-DestSec-Fetch-Dest는 브라우저가 자동으로 붙이는 Fetch Metadata 헤더로, 요청된 리소스가 최종적으로 어떻게 쓰일지(문서·이미지·스크립트·스타일·폰트·워커·빈 fetch 등)를 알려 줍니다. 서버는 목적지와 실제 콘텐츠 유형의 불일치를 근거로 오용을 탐지할 수 있습니다.
값은 document·image·script·style·font·audio·video·worker·embed·object·empty 등 다양합니다. empty는 fetch()·XHR처럼 특정 소비 목적지가 없는 요청을 뜻합니다. 이 헤더는 <img src>가 트리거한 요청인지, <script src>가 트리거한 요청인지처럼 '브라우저가 이 응답을 무엇으로 다룰 예정인지'를 서버에 노출합니다.
보안 활용의 핵심은 목적지와 리소스 성격의 모순 탐지입니다. 예컨대 JSON API 엔드포인트로 향하는 요청의 Sec-Fetch-Dest가 script라면, 이는 공격자가 응답을 <script>로 로드해 XSSI로 데이터를 훔치려는 신호일 수 있습니다. 서버는 '이 엔드포인트는 script/style 목적으로 로드되면 안 된다'는 규칙으로 거부할 수 있습니다.
또한 X-Content-Type-Options: nosniff와 함께, 응답의 실제 Content-Type과 요청 목적지가 어긋나면(예: text/html인데 dest=script) 브라우저가 실행을 거부합니다. Sec-Fetch-Dest는 이 판단을 서버측에서도 선제적으로 내릴 수 있는 재료를 줍니다.
Sec-Fetch-Dest: <document | image | script | style | font | empty | audio | video | worker | ...>e.g. Sec-Fetch-Dest: image
document | 최상위 문서로 사용될 요청(내비게이션). |
image / audio / video / font | 각각 이미지·오디오·비디오·폰트 리소스로 로드됨. |
script / style / worker | 스크립트·스타일시트·워커로 실행/적용될 리소스. |
empty | fetch()·XHR처럼 특정 목적지가 없는 요청. |