在 Nginx 上配置 HSTS
HTTP響應中包含 Strict-Transport-Security 頭實現網站HSTS,像下面這樣配置:
Strict-Transport-Security: max-age=31536000; includeSubDomains; preload,就實現了HSTS,即—— HTTP Strict Transport Security,HTTP嚴格傳輸安全。假設TLS鏈接沒有錯誤,兼容的瀏覽器將會在 max-age 參數指定的保留期內激活HSTS。
一旦站點啓用了HSTS,用戶的後續訪問就會直接進入443端口,然而你還須要確保那些訪問到80端口的用戶能被重定向到正確的地址。爲了支持這個重定向,並且因爲在明文響應中HSTS響應頭是不被容許的。
須要配置重定向
# 增長HSTS
[root@www conf]# vim nginx.conf
......
server {
listen 80;
server_name *.test05.com test05.com;
return 301 https://$host$request_uri;
}
......
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always ;
# max-age:時間單位是秒,31536000/3600*24 =365天
# always:表示不管哪一種請求都將HSTS的頭髮送給客戶端,也包括錯誤響應。默認狀況404等是不發送HSTS頭的。
# includeSubDomains:參數指定在當前主機域名及其全部子域上啓用HSTS。
# preload:是一個可選項,是一個爲了解決第一次訪問的用戶,沒法預先得知HSTS設置,而建立的
# 要注意 add_header 這個指令的繼承方式,若是一個子配置塊中設置了 add_header 指令,那麼在上層配置塊中的 add_header 指令是不會被繼承的。若是你須要在子配置中添加額外的 add_header 指令,那麼有關HSTS那部分要複製到子配置中。
[root@www conf]# ../sbin/nginx -t
nginx: the configuration file /project/nginx1.15.0/conf/nginx.conf syntax is ok
nginx: configuration file /project/nginx1.15.0/conf/nginx.conf test is successful
[root@www conf]# ../sbin/nginx -s reload
在 Nginx 上使用 CSP
內容安全策略(content security policy,CSP)是一種聲明的安全機制,可讓網站運營者可以控制遵循CSP的用戶代理(一般是瀏覽器)的行爲。經過控制要啓用哪些功能,以及從哪裏下載內容,能夠減小網站的***面。
CSP的主要目的是防護跨站點腳本(cross-ste scripting,XSS)***。例如,CSP能夠徹底禁止內聯的JavaScript,而且控制外部代碼從哪裏加載。它也能夠禁止動態代碼執行。禁用了全部的這些***源,XSS***變得更加困難。一個網站經過設置 Content-Security-Policy 響應頭啓用所需的CSP策略。
具體規則:
default-src:默認策略
script-src:js腳本
style-src:樣式
img-src:圖片
connect-src:連接
font-src:字體
object-src:插件<object>, <embed> 或者<applet>等
media-src: 多媒體<audio>,<video>之類
frame-src:frame
sandbox:沙箱
可取值與含義:
'*':任意來源
'none':任何來源的都不加載
'self':同源,與請求同源的資源能夠加載
data 編碼過的資源,例如Base64編碼過的圖片
'unsafe-inline':行內代碼能夠執行
'unsafe-eval':容許動態代碼執行,例如 JavaScript的 eval()方法
https:要求來源是https協議的
https:// xxx.com:要求來源是https協議的某個站點
css.test.com:要求來源是某個站點
*.test.com:要求來源是某個站點及其全部的子站點
[root@www ~]# cd /project/nginx1.15.0/conf/
[root@www conf]# vim nginx.conf
......
add_header Content-Security-Policy "default-src 'self'; img-src * ; object-src * script-src www.test05.com" ;
[root@www conf]# ../sbin/nginx -t
nginx: the configuration file /project/nginx1.15.0/conf/nginx.conf syntax is ok
nginx: configuration file /project/nginx1.15.0/conf/nginx.conf test is successful
[root@www conf]# ../sbin/nginx -s reload
nginx 在配置上錯誤所形成的漏洞
[root@www ~]# cd /project/nginx1.15.0/conf/
[root@www conf]# vim nginx.conf
......
# 防止嵌入 到frame 中;避免點擊劫持***
add_header X-Frame-Options DENY ;
#禁止服務器自動解析資源類型
add_header X-Content-Type-Options nosniff ;
#防XSS***
add_header X-Xss-Protection 1;
X-Frame-Options 3個選項值:
DENY:拒絕一個頁以frame方式加載
SAMEORIGIN:同源域名下的頁面,能夠用frame方式加載
ALLOW-FROM:容許指定的域名以frame形式加載
點擊劫持,是在某個自身不安全站點的某個頁面上有一個iframe加載了你的網站的某個頁面,***者能夠篡改這個iframe,誘使用戶去點擊,因此最好仍是禁止iframe去加載你的頁面;或者是同源和個別指定站點能夠以frame形式加載你的頁面。
XSS***:跨站腳本***:
X-Xss-Protection:4個選項值:
0:不開啓XSS保護
1:開啓保護(瀏覽器中通常默認),檢測到跨站點腳本***,瀏覽器將刪除不安全的部分。
1; mode=block 檢測到***,瀏覽器將阻止頁面的呈現
1; report=<reporting-uri> 檢測到跨站點腳本***,瀏覽器將清理頁面並報告違規行爲。這使用CSP report-uri功能發送報告;只有chrome支持發送報告。
nosniff 是禁止嗅探 ,服務器提示客戶端必定按照 Content-Type 首部中的 MIME 類型來解析,而不能對其進行修改。
禁用了客戶端的 MIME 類型嗅探行爲,防止惡意代碼的注入。開啓X-Content-Type-Options 要注意,要保證所傳輸的內容都要有正確 Content-Type 屬性,要是沒有這個屬性,可能會形成加載不成功和沒法運行;由於關閉了瀏覽器自動識別這一項。有些瀏覽器 如 IE9 ,IE11 在沒法得到類型時,就不加載內容。
nginx配置中的 目錄穿透隱患:要確保配置的路徑和alias 配置的路徑 ,
要都有 / ;或者都沒有 /
location /download/ {
autoindex on;
alias /project/nginx1.15.0/files/;
}
location /download {
autoindex on;
alias /project/nginx1.15.0/files/;
}