針對當(dāng)前環(huán)境下,對網(wǎng)絡(luò)安全的要求較高,平臺的搭建從各個(gè)方面都在增強(qiáng)安全性。以下是從http頭文件的方面,利用參數(shù)設(shè)置開啟瀏覽器的安全策略,來實(shí)現(xiàn)相關(guān)的安全機(jī)制。由于目前的服務(wù)環(huán)境未nginx,所以配置都針對NGINX的設(shè)置,如果是tomcat,同理網(wǎng)上找對應(yīng)的修改參數(shù)即可。
(注:不全面的部分,后續(xù)會(huì)進(jìn)行補(bǔ)充)
全部配置如下:
add_header Content-Security-Policy "default-src 'self' xxx.xxx.com(允許的地址)
add_header X-Content-Type-Options "nosniff";
add_header X-XSS-Protection "1; mode=block";
add_header X-Frame-Options SAMEORIGIN;
add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload";
add_header 'Referrer-Policy' 'origin';
add_header X-Download-Options noopen;
add_header X-Permitted-Cross-Domain-Policies none;
說明如下:
內(nèi)容網(wǎng)頁安全策略,為了解決(緩解,實(shí)際上好像不能完全解決XSS攻擊)制定的策略,要求請求頭增加Content-Security-Policy配置,提供加載靜態(tài)資源的白名單策略。
應(yīng)對漏洞:XSS攻擊
配置策略:
script-src
:外部腳本style-src
:樣式表img-src
:圖像media-src
:媒體文件(音頻和視頻)font-src
:字體文件object-src
:插件(比如 Flash)child-src
:框架frame-ancestors
:嵌入的外部資源(比如<frame>、<iframe>、<embed>和<applet>)connect-src
:HTTP 連接(通過 XHR、WebSockets、EventSource等)worker-src
:worker
腳本manifest-src
:manifest 文件通過上訴配置,來控制平臺只能執(zhí)行同源的或者規(guī)定源(網(wǎng)址)的js、css等腳本。該配置由瀏覽器執(zhí)行,啟動(dòng)后,不符合規(guī)則的外部資源就會(huì)被拒絕,從而一定程度屏蔽了XSS攻擊。
示例:script-src 'self'; object-src 'none'; style-src cdn.example.org third-party.org; child-src https:
說明:script只接受同源的 ,object對象不接受,css只接受cdn.example.org third-party.org網(wǎng)址的 ,網(wǎng)站支持吃https的(這個(gè)好像不好使,后面有其他策略來實(shí)現(xiàn)這個(gè))
nginx配置:add_header Content-Security-Policy "default-src 'self' xxx.xxx.com(允許的地址) 允許本域名和后邊的域名腳本可以執(zhí)行
此配置有很多細(xì)節(jié)的控制,詳見http://www.ruanyifeng.com/blog/2016/09/csp.html
注意:此配置會(huì)屏蔽范圍外的腳本,如果是已經(jīng)上線的系統(tǒng),需要考慮下是否有引入外部腳本的情況,避免盲目增加配置,導(dǎo)致生產(chǎn)事故。慎用。。
約定資源的響應(yīng)頭,屏蔽內(nèi)容嗅探攻擊。
應(yīng)對漏洞:內(nèi)容嗅探攻擊
網(wǎng)絡(luò)請求中,每個(gè)資源都有自己的類型,比如Content-Type:text/html 、image/png、 text/css。但是有一些資源的類型是未定義或者定義錯(cuò)了,導(dǎo)致瀏覽器會(huì)猜測資源類型,嘗試解析內(nèi)容,從而給了腳本攻擊可乘之機(jī)。比如利用一個(gè)圖片資源去執(zhí)行一個(gè)惡意腳本。
通過設(shè)置 X-Content-Type-Options: nosniff ,瀏覽器嚴(yán)格匹配資源類型,會(huì)拒絕加載錯(cuò)誤或者不匹配的資源類型。(PS:排查問題過程中,網(wǎng)上看到一個(gè)人用流的方式從后臺給前臺傳圖片,大概代碼<img src="xxxxx.xxxx.do"> 由于后端未指定資源類型,導(dǎo)致增加該配置后無法顯示圖片)
nginx配置:add_header X-Content-Type-Options "nosniff";
開啟瀏覽器XSS防護(hù)(原理不明,待研究.好像是瀏覽器自己有個(gè)filter,能過濾xss攻擊腳本)。開啟后不會(huì)影響業(yè)務(wù),無特殊情況,建議開啟。
應(yīng)對漏洞:XSS攻擊
配置參數(shù):
X-XSS-Protection: 0 關(guān)閉防護(hù)
X-XSS-Protection: 1 開啟防護(hù)
X-XSS-Protection: 1; mode=block 開啟防護(hù) 如果被攻擊,阻止腳本執(zhí)行。
nginx配置:add_header X-XSS-Protection "1; mode=block";
開個(gè)此屬性,控制頁面是否可以用于ifream中,如果使用,是什么范圍。也可以通過這個(gè)控制來避免自己的資源頁面被其他頁面引用。
應(yīng)對漏洞:點(diǎn)擊劫持
攻擊者會(huì)用一個(gè)自己網(wǎng)站,用ifream或者fream嵌套的方式引入目標(biāo)網(wǎng)站,誘使用戶點(diǎn)擊。從而劫持用戶點(diǎn)擊事件。
配置的三個(gè)參數(shù):
deny 標(biāo)識該頁面不允許在frame中展示,即便在相同域名的頁面中嵌套也不行。
sameorigin 可以在同域名的頁面中frame中展示
allow-form url 指定的fream中展示。
nginx配置:add_header X-Frame-Options SAMEORIGIN;
告訴瀏覽器只能通過https訪問當(dāng)前資源。
nginx配置:add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload";
說明:在接下來的一年(即31536000秒)中,瀏覽器只要向xxx或其子域名發(fā)送HTTP請求時(shí),必須采用HTTPS來發(fā)起連接。
用來規(guī)定什么情況下顯示referer字段,以及referer字段顯示的內(nèi)容多少。
漏洞說明:
當(dāng)用戶在瀏覽器上點(diǎn)擊一個(gè)鏈接時(shí),會(huì)產(chǎn)生一個(gè) HTTP 請求,用于獲取新的頁面內(nèi)容,而在該請求的報(bào)頭中,會(huì)包含一個(gè) Referrer,用以指定該請求是從哪個(gè)頁面跳轉(zhuǎn)頁來的,常被用于分析用戶來源等信息。但是也成為了一個(gè)不安全的因素,所以就有了 Referrer-Policy,用于過濾 Referrer 報(bào)頭內(nèi)容,其可選的項(xiàng)有: no-referrer no-referrer-when-downgrade origin origin-when-cross-origin same-origin strict-origin strict-origin-when-cross-origin unsafe-url .
配置參數(shù):
no-referrer-when-downgrade:在同等安全等級下(例如https頁面請求https地址),發(fā)送referer,但當(dāng)請求方低于發(fā)送方(例如https頁面請求http地址),不發(fā)送referer
origin:僅僅發(fā)送origin,即protocal+host
origin-when-cross-origin:跨域時(shí)發(fā)送origin
same-origin:當(dāng)雙方origin相同時(shí)發(fā)送
strict-origin:當(dāng)雙方origin相同且安全等級相同時(shí)發(fā)送
unfafe-url:任何情況下都顯示完整的referer
nginx配置:add_header 'Referrer-Policy' 'origin';
注意:此配置可能會(huì)導(dǎo)致某些系統(tǒng)訪問率統(tǒng)計(jì)插件失效,如果有此類業(yè)務(wù),一定要驗(yàn)證下。
一個(gè)針對flash的安全策略,用于指定當(dāng)不能將"crossdomain.xml"文件(當(dāng)需要從別的域名中的某個(gè)文件中讀取 Flash 內(nèi)容時(shí)用于進(jìn)行必要設(shè)置的策略文件)放置在網(wǎng)站根目錄等場合時(shí)采取的替代策略。
配置參數(shù):
X-Permitted-Cross-Domain-Policies: master-only
master-only 只允許使用主策略文件(/crossdomain.xml)
add_header X-Permitted-Cross-Domain-Policies none;
用于控制瀏覽器下載文件是否支持直接打開,如果支持直接打開,可能會(huì)有安全隱患。
配置信息:X-Download-Options: noopen
noopen 用于指定IE 8以上版本的用戶不打開文件而直接保存文件。在下載對話框中不顯示“打開”選項(xiàng)。
nginx配置:add_header X-Download-Options noopen;
在head中可以設(shè)置cookie的參數(shù),來組合實(shí)現(xiàn)一些安全策略。
secure
Secure屬性是說如果一個(gè)cookie被設(shè)置了Secure=true,那么這個(gè)cookie只能用https協(xié)議發(fā)送給服務(wù)器
HttpOnly
設(shè)置HttpOnly=true的cookie不能被js獲取到,無法用document.cookie打出cookie的內(nèi)容。
nginx:proxy_cookie_path / "/; Path=/; Secure; HttpOnly";