nginx網(wǎng)絡(luò)安全配置

1.隱藏nginx版本信息

在 nginx.conf 中配置

http {
  ...

  # 隱藏版本信息
  server_tokens off;

  ...
}

可以看到已經(jīng)沒有nginx信息了


隱藏nginx版本

2.隱藏powered-by

一些 WEB 語言或框架默認(rèn)輸出的 x-powered-by 也會泄露網(wǎng)站信息,他們一般都提供了修改或移除的方法,可以自行查看手冊。如果部署上用到了 Nginx 的反向代理,也可以通過 proxy_hide_header 指令隱藏它:

location / {
  ...
  # 隱藏powered-by
  proxy_hide_header        X-Powered-By;
  ...
}

3.相關(guān)安全設(shè)置

# CSP 通過指定允許瀏覽器加載和執(zhí)行那些資源,使服務(wù)器管理者有能力減少或消除 XSS 攻擊的可能性
add_header  Content-Security-Policy  "default-src 'self'; img-src 'self' *.alicdn.com; object-src 'none'; script-src 'self' *.alicdn.com; style-src 'self' *.alicdn.com; frame-ancestors 'self'; base-uri 'self'; form-action 'self'";

# X-Content-Type-Options 響應(yīng)頭相當(dāng)于一個提示標(biāo)志,被服務(wù)器用戶提示瀏覽器一定要遵循 Content-Type 頭中 MIME 類型的設(shè)定,而不能對其進(jìn)行修改。
add_header  X-Content-Type-Options nosniff;

# Strict-Transport-Security(HSTS) 告訴瀏覽器該站點只能通過 HTTPS 訪問,如果使用了子域,也建議對任何該站點的子域強制執(zhí)行此操作。
add_header  Strict-Transport-Security "max-age=31536000; includeSubDomains";

# 給瀏覽器指示允許一個頁面可否在frame嵌入
# DENY 表示該頁面不允許在 frame 中展示,即便是在相同域名的頁面中嵌套也不允許
# SAMEORIGIN # 表示該頁面可以在相同域名頁面的 frame 中展示
# ALLOW-FROM uri # 表示該頁面可以在指定來源的 frame 中展示。
add_header  X-Frame-Options SAMEORIGIN;

# 跨域訪問
add_header  Access-Control-Allow-Origin *;
add_header  Access-Control-Allow-Origin *.xx.com;

# xss攻擊防護
add_header  X-XSS-Protection  "1; mode=block";

# cookie讀取設(shè)置
add_header  Set-Cookie "Path=/; HttpOnly; Secure";
# 反向代理時要設(shè)置參數(shù)解決Cookie跨域丟失
proxy_cookie_path / "/; httponly; secure; SameSite=None";

4.跨域請求設(shè)置

通過配置Access-Control-Allow-Origin參數(shù)可以指定哪些域可以訪問你的服務(wù)器,這個值要么是* 要么是帶協(xié)議端口號確定的值, *.xx.com都是錯誤的值。

  set $cors "";
  if ($http_origin ~* (.*\.atpool.com)) {
    set $cors $http_origin;
  }
  add_header Access-Control-Allow-Origin $cors;
  add_header Access-Control-Allow-Methods "GET,POST,OPTIONS,DELETE,PUT";
  add_header Access-Control-Allow-Credentials true;
  add_header Access-Control-Allow-Headers *;
  if ($request_method = "OPTIONS") {
    return 204;
  }

完整配置

server {
  listen  80;
  server_name test.xx.com;
  
  # 證書設(shè)置
  ssl_certificate cert/xx.com.pem;
  ssl_certificate_key cert/xx.com.key;
  ssl_session_timeout 5m;
  ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
  # 只啟用TLS1.2 以上
  ssl_protocols TLSv1.2 TLSv1.3;
  ssl_prefer_server_ciphers on;
  
  # 安全相關(guān)設(shè)置
  add_header  Content-Security-Policy  "default-src 'self' *.xx.com data: 'unsafe-inline';";
  add_header  Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
  add_header  X-Frame-Options  SAMEORIGIN;
  add_header  X-Content-Type-Options nosniff;
  add_header  X-XSS-Protection  "1; mode=block";
  add_header  Set-Cookie "Path=/; HttpOnly; Secure";
  add_header  Cache-Control  max-age=86400;
  
  # 跨域設(shè)置
  set $cors "";
  if ($http_origin ~* (.*\.xx.com)) {
    set $cors $http_origin;
  }
  add_header Access-Control-Allow-Origin $cors;
  add_header Access-Control-Allow-Methods "GET,POST,OPTIONS,DELETE,PUT";
  add_header Access-Control-Allow-Credentials true;
  add_header Access-Control-Allow-Headers *;
  if ($request_method = "OPTIONS") {
    return 204;
  }

  location / {
    gzip on;
    gzip_comp_level 6;
    gzip_min_length 1k;
    gzip_buffers 4 16k;
    gzip_types text/plain application/x-javascript text/css application/xml application/javascript application/json application/vnd.ms-fontobject font/ttf font/opentype font/x-woff image/svg+xml;

    proxy_pass   http://127.0.0.1:8000;
    proxy_hide_header   X-Powered-By; # 隱藏 powered-by
    proxy_cookie_path   / "/; httponly; secure; SameSite=None";
    proxy_set_header    X-Real-IP        $remote_addr;
    proxy_set_header    X-Forwarded-For  $remote_addr;
    proxy_set_header    X-Forwarded-Proto $scheme;
    proxy_set_header    Host $http_host;
    proxy_redirect      default;
  }
 
}

相關(guān)鏈接
Content Security Policy 入門教程 - 阮一峰的網(wǎng)絡(luò)日志 (ruanyifeng.com)
前端必須知道的 HTTP 安全頭配置 (juejin.cn)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容