Nginx HttpHeader增加幾個關鍵的安全選項

Eric zhou發表於2024-12-06

針對像德勤這樣的專業滲透測試(Pentest)的場景中,為了確保網站的安全性並透過嚴格的安全審查,需要為這些安全頭配置更細緻、專業的引數。

以下是對每個選項的建議以及設定值的詳細說明:

1. Strict-Transport-Security (HSTS)

確保所有通訊強制透過 HTTPS 並防止降級攻擊。

推薦值:

add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;

引數解釋:

  • max-age=31536000:HSTS 快取有效期設為 1 年(以秒為單位),確保長期有效。
  • includeSubDomains:將 HSTS 策略擴充套件到所有子域名,避免主域和子域之間的攻擊風險。
  • preload:將域名提交到 HSTS 預載入列表以防止首次訪問時的降級攻擊。需要在 HSTS Preload List 提交域名。

2. Content-Security-Policy (CSP)

定義允許載入的內容來源,防止跨站指令碼(XSS)和資料注入攻擊。

推薦值(需根據業務需求定製):

add_header Content-Security-Policy "default-src 'none'; script-src 'self'; style-src 'self'; img-src 'self' data:; font-src 'self'; object-src 'none'; frame-ancestors 'none'; base-uri 'self'; form-action 'self';" always;

引數解釋:

  • default-src 'none':預設禁止載入任何外部資源。
  • script-src 'self':僅允許載入本域的指令碼。
  • style-src 'self':僅允許載入本域的樣式。
  • img-src 'self' data::僅允許載入本域的圖片和 Base64 內嵌的圖片。
  • font-src 'self':僅允許載入本域的字型。
  • object-src 'none':禁止載入外掛內容(如 Flash)。
  • frame-ancestors 'none':防止網站被嵌入到 iframe 中,防止點選劫持攻擊。
  • base-uri 'self':限制 <base> 標籤的 URL。
  • form-action 'self':只允許表單提交到本站,防止 CSRF 攻擊。

注意:

  • CSP 策略需與網站的實際需求相匹配,以避免破壞正常功能。
  • 如果網站需要使用第三方資源(如 Google Fonts 或 CDN),需明確指定來源,例如:
    script-src 'self' https://example.com; style-src 'self' https://fonts.googleapis.com;.

3. X-Content-Type-Options

防止 MIME 型別混淆攻擊,強制瀏覽器遵循 Content-Type 響應頭。

推薦值:

add_header X-Content-Type-Options "nosniff" always;

引數解釋:

  • nosniff:禁止瀏覽器進行內容型別嗅探,防止將非預期內容(如指令碼檔案)執行。

4. X-XSS-Protection

啟用瀏覽器的內建 XSS 保護機制(某些現代瀏覽器已預設停用該功能)。

推薦值:

add_header X-XSS-Protection "1; mode=block" always;

引數解釋:

  • 1:啟用 XSS 保護。
  • mode=block:檢測到潛在攻擊時,阻止頁面載入,而不是僅僅清理惡意內容。

注意:

  • 當前瀏覽器(如 Chrome 和 Edge)不再支援 XSS 保護頭部,建議將 CSP 作為首選防護方案。
  • 如果目標使用者中仍有使用舊版瀏覽器的場景,可以啟用此頭。

其他安全頭建議(可選):

1. Referrer-Policy

控制瀏覽器在跳轉時傳送的引用資訊。

add_header Referrer-Policy "strict-origin-when-cross-origin" always;

2. Permissions-Policy(前身為 Feature-Policy)

限制瀏覽器功能(如地理位置、攝像頭、麥克風等)的訪問許可權。

add_header Permissions-Policy "geolocation=(), camera=(), microphone=()" always;

檢查安全頭的生效情況:

    1. 工具推薦:使用以下工具驗證頭部配置:
      • Security Headers
      • Mozilla Observatory
    2. 使用 curl 檢視響應頭:
      curl -I https://your-domain.com

相關文章