Nginx配置安全策略总结

时间:2025-01-14 08:56:33

Nginx配置安全策略总结

    • “Content-Security-Policy”头缺失或不安全
    • “X-Content-Type-Options”头缺失或不安全
    • “X-XSS-Protection”头缺失或不安全
    • HTTP Strict-Transport-Security头缺失或不安全
    • 发现可高速缓存的SSL页面
    • 检测到SHA-1密码套件
    • 检测到隐藏目录
    • 检测到支持较老的TLS版本
    • 未实施加密
    • 启用了不安全的“OPTIONS”HTTP 方法

以下均在 nginx.配置 即可

“Content-Security-Policy”头缺失或不安全

这里 script-src 放开了允许内联js 'unsafe-inline',其实这里并不是很安全,但公司项目的前端架构已经成型改动代码工作量太大,先跟着指定的ip或域名访问这样配置着。后面有时间在出动态生成 nonce属性值的文档。

add_header Content-Security-Policy "default-src 'self' *. *. ;  script-src 'self' 'unsafe-inline'  *. ; connect-src 'self';img-src * data: blob: ; style-src 'self' 'unsafe-inline' 'unsafe-eval' *. *. https:  ;  frame-ancestors 'self'; font-src * https: data: ";

“X-Content-Type-Options”头缺失或不安全

add_header X-Content-Type-Options nosniff;

“X-XSS-Protection”头缺失或不安全

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

HTTP Strict-Transport-Security头缺失或不安全

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

发现可高速缓存的SSL页面

# “Cache-Control: no-store”和“Pragma: no-cache”或“Cache-Control: no-cache”
add_header Cache-Control max-age=3600; 

检测到SHA-1密码套件

ssl_ciphers ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:!NULL:!aNULL:!MD5:!ADH:!RC4:!DH:!DHE:!SHA-1;
ssl_prefer_server_ciphers on;

检测到隐藏目录

location ^~ /(html|static|img) {
 	deny all;
}
location ^~ /地址名称/对应的目录/ {
 	deny all;
}
error_page 403 =404 /404.html;

检测到支持较老的TLS版本

# TLSv1.2 以上版本即可
ssl_protocols TLSv1.2 TLSv1.3;

未实施加密

set $open_http 0;
if ($scheme = http) {
     set $open_http "${open_http}1";
 }
 if ($scheme = https) { 
     set $open_http "${open_http}0";
 }
 if ($request_uri ~* "/地址名称/ajax/libs/") {
     set $open_http "${open_http}0";
 }
 if ($request_uri ~* "/地址名称/js/") {
     set $open_http "${open_http}0";
 }

 if ($open_http = "010") {
     return 403;
 }

启用了不安全的“OPTIONS”HTTP 方法

server {
    ...
    # 如果我们在服务器环境中,最好使用这样的结构:
    add_header Allow "GET, HEAD, POST" always;
    
    if ($request_method !~ ^(GET|HEAD|POST)$) {
      # 您还可以在“if”上下文中使用“add_header”:
      # add_header Allow "GET, HEAD, POST" always;
      return 405;
    
    }
    ...
}