一??X-Content-Type-Options響應頭
說明:先寫個'框架',后續補充
思考:請求類型是 "style" 和 "script" 是什么意思?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??script標簽? style? StyleSheet
??
JavaScript MIME type
文件擴展和Content-Type的映射關系
場景: 一個'.jpg的圖片文件'被惡意嵌入了可'執行'的'js'代碼
①? 基礎鋪墊
nginx(十八)mime.types的作用
+++++++ "列舉CDN一個應用場景:避免nginx默認的Content-Type元數據" +++++++types {}default_type '';特點: 此時'nginx'不返回'Content-Type'響應頭,完全由'瀏覽器'自行判斷
②? 瀏覽器默認行為
1) 互聯網上的資源有'各種類型',通常瀏覽器會根據'響應頭的Content-Type字段'來'分辨'它們的類型2) 例如:"text/html"代表html文檔、"image/png"是PNG圖片、"text/css"是CSS樣式文檔3) 然而'有些資源的Content-Type'是'錯的'或者'未定義[最常見]'ps:這時某些瀏覽器會'啟用MIME-sniffing'來'猜測'該資源類型,'解析'內容并'執行' --> "默認"1、給一個html文件指定Content-Type為"text/plain",在IE8中會被當做html來解析2、利用瀏覽器的這個特性,攻擊者甚至可以讓'原本應該解析為圖片'的請求被解析為'js'遺留: X-Content-Type-Options: nosniff --> "禁用瀏覽器的類型猜測行為"+++++++++++++++++++ "案例講解" +++++++++++++++++++
# 1) 取消nginx'默認'的 mime.types配置
types { } # 2) 指定css文件返回指定content-type
default_type text/html;
?
③? ?問題引入
1、資源'展示'
2、這里'簡化'nginx.conf配置,只做了'核心'說明
3、測試'現象'
現象: url請求'.css和.js 靜態文件',nginx 返回的Content-Type是'text/html'chrome '報錯':1、Refused to execute script from 'xxx.js' 2、because its MIME type ('text/html') is not executable,3、and strict MIME type checking is enabled強調:作為'運維人員',盡可能的'保留'和'還原'案發的'事故'現場疑惑:為什么沒有根據'mine.type'返回正確的'Content-Type'?
現象及其相似?
index.html 'meta text/html' 中通過'<script src="js/min.wzj.js">'相對路徑'加載'文件++++++++++ "題外話" ++++++++++location ~* min.wzj.js$ {alias /home/kiosk/WebstormProjects/form/js/min.wzj.js }
location和alias的搭配問題?
1、原因:是不是'原來'是好的,然后加了'安全加固'造成的add_header X-Content-Type-Options: nosniff2、觀察: 是'nginx返回靜態資源'還是后端'返回'的通過'$upstream_addr'或'sent_http_content_type'判斷備注:對比'$upstream_http_content_type'和'sent_http_content_type' -->"加工處理"補充: 定義一個'獨一無二的響應頭[加always]'放到對應的location中,看'到底生效了沒'?附加: 在client看'異常url'的響應體,也'可以'輔助理解3、排錯1、如果是'后端返回錯誤的Content-Type',nginx如何能攔截?2、如果是'nginx自身返回錯誤的Content-Type',如何排查呢?3、?詭異: nginx把'圖片'識別為'text/html',加了add_header都'不管用'4、遺留:?nginx是根據'$request_uri'還是'$uri' 是查找'靜態'資源?
相關配置說明
遺留:add_header '顯示添加'會不會'影響'default_type??思考:如果Content-Type'請求頭'只有有限的幾個,與響應頭(Content-Type)'協商不一致'呢?探究:原來雖然配置了安全頭,但是'add_header'作用域覆蓋了,導致'沒有生效'
④? 參考鏈接
css 的content-type為"text/html" 不是 "text/css" html兼容性
解決css文件返回格式Content-TYpe為text/html問題
php-fpm處為通配符"/",使得所有請求均會被php-fpm處理,導致css文件的響應頭出錯
瀏覽器strict MIME type checking問題處理
為 CSS 設置正確的 Content-Type
Java Web?發送請求 CSS文件 和 JS文件引用失敗