通過對Security Defenses的配置 ,可以對http頭添加相應(yīng)的安全配置 ,如CSP, X-Frame-Options, X-Content-Type-Option等
推薦使用CSP,不建議使用X-Frame-Options頭
參考:https://www.rfc-editor.org/rfc/rfc7034
X-Frame-Options SAMEORIGIN
a.shop.com和www.shop.com
你的網(wǎng)站添加了X-Frame-Options之后,保存了自己的網(wǎng)站不被其它網(wǎng)站引用,比如其它網(wǎng)站想iframe你的網(wǎng)站,通過X-Frame-Options DENY之后,其它網(wǎng)站是不容許iframe你的網(wǎng)站的。
HTTP 響應(yīng)頭是用來給瀏覽器指示允許一個頁面可否在 , 或者 中展現(xiàn)的標記。網(wǎng)站可以使用此功能,來確保自己網(wǎng)站的內(nèi)容沒有被嵌套到別人的網(wǎng)站中去,也從而避免了點擊劫持 (clickjacking) 的攻擊。 現(xiàn)代瀏覽器遵循 X-Frame-Options 協(xié)議頭,它表明一個資源是否允許加載到 frame 或者 iframe 中。 如果響應(yīng)包含值為 SAMEORIGIN 的協(xié)議頭,瀏覽器會在 frame 中只加載同源請求的的資源;如果協(xié)議頭設(shè)置為 ,瀏覽器會在加載 frame 時屏蔽所有資源,無論請求來自于哪個站點;如果希望開放給某個域名,可以使用ALLOW-FROM uri來實現(xiàn)它,DENY表示拒絕所有請求。 如果在kc中配置了它,并且在其它網(wǎng)站想通過iframe嵌入KC的頁面,那么,如果使用SAMEORIGIN 它會出現(xiàn)如下圖提示;如果是同源網(wǎng)站,是可以通過iframe訪問它的 # 不允許被嵌入,包括<frame>, <iframe>, <embed> 和 <object> X-Frame-Options: deny # 只允許被同源的頁面嵌入 X-Frame-Options: sameorigin # (已廢棄)只允許被白名單內(nèi)的頁面嵌入,很多瀏覽器已不在支持,推薦直接CSP X-Frame-Options:ALLOW_FROM www.example.com #只容許被baidu.com這個域名和它的所有子域名和不同端口等嵌套本網(wǎng)站,例如a.baidu.com,b.baidu.com:8081等 X-Frame-Options:ALLOW_FROM baidu.com 2 Content Security Policy 參考:https://www.w3.org/TR/CSP/ 你的網(wǎng)站需要引用外部資源,如你需要引用微信的js腳本,或者需要iframe微信的頁面,這時,你需要配置自己網(wǎng)站的CSP,將微信添加到白名單即可,例如:frame-src 'self' https://www.recaptcha.net https://open.weixin.qq.com "網(wǎng)頁安全政策"(Content Security Policy,縮寫 CSP)CSP 的實質(zhì)就是白名單制度,開發(fā)者明確告訴客戶端,哪些外部資源可以加載和執(zhí)行,等同于提供白名單。它的實現(xiàn)和執(zhí)行全部由瀏覽器完成,開發(fā)者只需提供配置。 # keycloak`不去嵌套其它網(wǎng)絡(luò)`的資源 Content-Security-Policy: frame-src 'self' # keycloak`不允許被其它網(wǎng)站`嵌入,包括<frame>, <iframe>, <object>, <embed> 和 <applet> Content-Security-Policy: frame-ancestors 'none' # 只允許被同源的頁面嵌入 Content-Security-Policy: frame-ancestors 'self' # 只允許被白名單的網(wǎng)站嵌入 Content-Security-Policy: frame-ancestors www.example.com **注意:由于keycloak對接的微信掃碼功能,采用了iframe的方式嵌入微信的二維碼頁面,所以這塊我們不能配置,不然微信不能使用,或者使用Content-Security-Policy: frame-src open.weixin.qq.com CSP中的unsafe-inline和unsafe-eval 在CSP(內(nèi)容安全策略)的script-src指令中添加 'unsafe-inline' 和 'unsafe-eval' 的作用是允許頁面使用內(nèi)聯(lián)腳本和使用 eval() 函數(shù)執(zhí)行動態(tài)腳本。 具體解釋如下: 'unsafe-inline':允許頁面使用內(nèi)聯(lián)腳本。內(nèi)聯(lián)腳本是直接嵌入在 HTML 中的 JavaScript 代碼,例如 <script>alert('Hello, World!');</script>。默認情況下,CSP 不允許使用內(nèi)聯(lián)腳本,因為它們增加了跨站腳本攻擊(XSS)的風險。然而,在某些情況下,可能需要允許內(nèi)聯(lián)腳本來實現(xiàn)特定的功能或與舊代碼兼容。 'unsafe-eval':允許頁面使用 eval() 函數(shù)執(zhí)行動態(tài)腳本。eval() 函數(shù)可以將字符串作為 JavaScript 代碼進行解析和執(zhí)行。默認情況下,CSP 不允許使用 eval() 函數(shù),因為它存在安全風險,可能導(dǎo)致代碼注入攻擊或者不安全的代碼執(zhí)行。然而,某些應(yīng)用程序或庫可能需要使用 eval() 函數(shù)來實現(xiàn)動態(tài)腳本加載或其他特定功能。 需要注意的是,添加 'unsafe-inline' 和 'unsafe-eval' 可能會降低網(wǎng)頁的安全性,因為它們打開了潛在的漏洞。在實際使用中,應(yīng)該盡量避免使用這兩個選項,并優(yōu)先考慮使用更安全的替代方法,如外部腳本文件和更嚴格的代碼驗證。只有在確保沒有其他可行的解決方案,并且確保內(nèi)聯(lián)腳本和 eval() 的使用是安全的情況下,才應(yīng)該考慮添加這兩個選項。 3 Content-Security-Policy-Report-Only 參考:https://www.w3.org/TR/CSP/ 與Content Security Policy的配置相同,但它不做限制,只是做為記錄 4 X-Content-Type-Options 參考: https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Headers/X-Content-Type-Options 如果服務(wù)器發(fā)送響應(yīng)頭 "X-Content-Type-Options: nosniff",則 script 和 styleSheet 元素會拒絕包含錯誤的 MIME 類型的響應(yīng)。這是一種安全功能,有助于防止基于 MIME 類型混淆的攻擊。 5 X-Robots-Tag 參考:https://http.dev/x-robots-tag 機器人元標簽,Robots 元標記,也稱為robots 標記,是一段 HTML 代碼,位于網(wǎng)頁的 部分,用于控制搜索引擎如何抓取和索引 URL。 機器人元標簽有什么用? 機器人元標記用于控制 Google 如何為您的網(wǎng)頁內(nèi)容編制索引。這包括: 是否在搜索結(jié)果中包含頁面 是否遵循頁面上的鏈接(即使它被阻止被索引) 請求不索引頁面上的圖像 請求不在 SERP 上顯示網(wǎng)頁的緩存結(jié)果 請求不在 SERP 上顯示頁面的片段(元描述) 常見的搜索引擎 Google:Googlebot 您可以在此處查看Google 抓取工具的完整列表 Bing:Bingbot 您可以在此處查看Bing 爬蟲的完整列表 DuckDuckGo : DuckDuckBot 百度:百度蜘蛛 Yandex : YandexBot 6 X-XSS-Protection 參考:https://owasp.org/www-project-secure-headers/#xxxsp 這是 HTTP 的一個響應(yīng)頭字段,要開啟很簡單,在服務(wù)器的響應(yīng)報文里加上這個字段即可。瀏覽器接收到這個字段則會啟用對應(yīng)的 XSS 防范模塊。 IE、Chrome 和 Safari 都內(nèi)置了這個模塊。edge 和火狐沒有內(nèi)置這個模塊。 開啟這個功能后,當瀏覽器檢測到跨站腳本攻擊(XSS)時,瀏覽器將對頁面做清理或直接阻止整個頁面的加載。 配置列表 X-XSS-Protection : 0 表示禁用 XSS 過濾這個功能 X-XSS-Protection : 1 表示啟用 XSS 過濾 X-XSS-Protection : 1;mode=block 表示啟用XSS過濾器 X-XSS-Protection : 1;report= 表示啟用 XSS 過濾,并使用report-uri的功能 POST 一個 XSS 警報。這個功能只有在 Chrome 中有效果,在 IE 中無效 7 HTTP Strict Transport Security (HSTS) 參考:https://owasp.org/www-project-secure-headers/#hsts HSTS是一個安全功能,它告訴瀏覽器只能通過HTTPS訪問當前資源, 禁止HTTP方式。 配置舉例: Strict-Transport-Security: max-age=31536000; includeSubDomains 在接下來的一年(即31536000秒)中,瀏覽器只要向example.com或其子域名發(fā)送HTTP請求時,必須采用HTTPS來發(fā)起連接。比如,用戶點擊超鏈接或在地址欄輸入 http://www.example.com/ ,瀏覽器應(yīng)當自動將 http 轉(zhuǎn)寫成 https,然后直接向 https://www.example.com/ 發(fā)送請求。 在接下來的一年中,如果 example.com 服務(wù)器發(fā)送的TLS證書無效,用戶不能忽略瀏覽器警告繼續(xù)訪問網(wǎng)站。
現(xiàn)代瀏覽器遵循 X-Frame-Options 協(xié)議頭,它表明一個資源是否允許加載到 frame 或者 iframe 中。 如果響應(yīng)包含值為 SAMEORIGIN 的協(xié)議頭,瀏覽器會在 frame 中只加載同源請求的的資源;如果協(xié)議頭設(shè)置為 ,瀏覽器會在加載 frame 時屏蔽所有資源,無論請求來自于哪個站點;如果希望開放給某個域名,可以使用ALLOW-FROM uri來實現(xiàn)它,DENY表示拒絕所有請求。
如果在kc中配置了它,并且在其它網(wǎng)站想通過iframe嵌入KC的頁面,那么,如果使用SAMEORIGIN 它會出現(xiàn)如下圖提示;如果是同源網(wǎng)站,是可以通過iframe訪問它的
# 不允許被嵌入,包括<frame>, <iframe>, <embed> 和 <object> X-Frame-Options: deny # 只允許被同源的頁面嵌入 X-Frame-Options: sameorigin # (已廢棄)只允許被白名單內(nèi)的頁面嵌入,很多瀏覽器已不在支持,推薦直接CSP X-Frame-Options:ALLOW_FROM www.example.com #只容許被baidu.com這個域名和它的所有子域名和不同端口等嵌套本網(wǎng)站,例如a.baidu.com,b.baidu.com:8081等 X-Frame-Options:ALLOW_FROM baidu.com
參考:https://www.w3.org/TR/CSP/
你的網(wǎng)站需要引用外部資源,如你需要引用微信的js腳本,或者需要iframe微信的頁面,這時,你需要配置自己網(wǎng)站的CSP,將微信添加到白名單即可,例如:frame-src 'self' https://www.recaptcha.net https://open.weixin.qq.com "網(wǎng)頁安全政策"(Content Security Policy,縮寫 CSP)CSP 的實質(zhì)就是白名單制度,開發(fā)者明確告訴客戶端,哪些外部資源可以加載和執(zhí)行,等同于提供白名單。它的實現(xiàn)和執(zhí)行全部由瀏覽器完成,開發(fā)者只需提供配置。
# keycloak`不去嵌套其它網(wǎng)絡(luò)`的資源 Content-Security-Policy: frame-src 'self' # keycloak`不允許被其它網(wǎng)站`嵌入,包括<frame>, <iframe>, <object>, <embed> 和 <applet> Content-Security-Policy: frame-ancestors 'none' # 只允許被同源的頁面嵌入 Content-Security-Policy: frame-ancestors 'self' # 只允許被白名單的網(wǎng)站嵌入 Content-Security-Policy: frame-ancestors www.example.com
**注意:由于keycloak對接的微信掃碼功能,采用了iframe的方式嵌入微信的二維碼頁面,所以這塊我們不能配置,不然微信不能使用,或者使用Content-Security-Policy: frame-src open.weixin.qq.com
Content-Security-Policy: frame-src open.weixin.qq.com
在CSP(內(nèi)容安全策略)的script-src指令中添加 'unsafe-inline' 和 'unsafe-eval' 的作用是允許頁面使用內(nèi)聯(lián)腳本和使用 eval() 函數(shù)執(zhí)行動態(tài)腳本。
script-src
'unsafe-inline'
'unsafe-eval'
eval()
具體解釋如下:
'unsafe-inline':允許頁面使用內(nèi)聯(lián)腳本。內(nèi)聯(lián)腳本是直接嵌入在 HTML 中的 JavaScript 代碼,例如 <script>alert('Hello, World!');</script>。默認情況下,CSP 不允許使用內(nèi)聯(lián)腳本,因為它們增加了跨站腳本攻擊(XSS)的風險。然而,在某些情況下,可能需要允許內(nèi)聯(lián)腳本來實現(xiàn)特定的功能或與舊代碼兼容。
<script>alert('Hello, World!');</script>
'unsafe-eval':允許頁面使用 eval() 函數(shù)執(zhí)行動態(tài)腳本。eval() 函數(shù)可以將字符串作為 JavaScript 代碼進行解析和執(zhí)行。默認情況下,CSP 不允許使用 eval() 函數(shù),因為它存在安全風險,可能導(dǎo)致代碼注入攻擊或者不安全的代碼執(zhí)行。然而,某些應(yīng)用程序或庫可能需要使用 eval() 函數(shù)來實現(xiàn)動態(tài)腳本加載或其他特定功能。
需要注意的是,添加 'unsafe-inline' 和 'unsafe-eval' 可能會降低網(wǎng)頁的安全性,因為它們打開了潛在的漏洞。在實際使用中,應(yīng)該盡量避免使用這兩個選項,并優(yōu)先考慮使用更安全的替代方法,如外部腳本文件和更嚴格的代碼驗證。只有在確保沒有其他可行的解決方案,并且確保內(nèi)聯(lián)腳本和 eval() 的使用是安全的情況下,才應(yīng)該考慮添加這兩個選項。
與Content Security Policy的配置相同,但它不做限制,只是做為記錄
參考: https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Headers/X-Content-Type-Options
如果服務(wù)器發(fā)送響應(yīng)頭 "X-Content-Type-Options: nosniff",則 script 和 styleSheet 元素會拒絕包含錯誤的 MIME 類型的響應(yīng)。這是一種安全功能,有助于防止基于 MIME 類型混淆的攻擊。
參考:https://http.dev/x-robots-tag
機器人元標簽,Robots 元標記,也稱為robots 標記,是一段 HTML 代碼,位于網(wǎng)頁的 部分,用于控制搜索引擎如何抓取和索引 URL。
機器人元標記用于控制 Google 如何為您的網(wǎng)頁內(nèi)容編制索引。這包括:
常見的搜索引擎
參考:https://owasp.org/www-project-secure-headers/#xxxsp
配置列表
參考:https://owasp.org/www-project-secure-headers/#hsts
HSTS是一個安全功能,它告訴瀏覽器只能通過HTTPS訪問當前資源, 禁止HTTP方式。
作者:倉儲大叔,張占嶺, 榮譽:微軟MVPQQ:853066980
支付寶掃一掃,為大叔打賞!