Nginx 安全的配置项
1、 漏扫出现的问题
1.1 检测到目标X-Content-Type-Options响应头缺失
修复方法:
nginx 增加响应头配置:
add_header X-Content-Type-Options "nosniff" always;
详细解释:
X-Content-Type-Options头信息是一种安全策略,用于防止浏览器在解析响应内容类型时执行MIME类型嗅探。MIME类型嗅探是一种浏览器行为,它会在某些情况下忽略服务器返回的Content-Type头信息,而是根据文件内容推断出MIME类型。这种行为可能会导致安全问题,例如在解析HTML页面时执行脚本或渲染嵌入式内容。
将X-Content-Type-Options的值设置为"nosniff"可以禁用浏览器的MIME类型嗅探功能,强制浏览器遵循服务器返回的Content-Type头信息。这可以提高Web应用程序的安全性,防止恶意站点通过MIME类型嗅探获取用户的敏感信息。
添加"always"参数可以确保该头信息始终向客户端发送,无论响应状态码是什么。
1.2 检测到目标X-XSS-Protection响应头缺失
修复方法:
nginx 增加响应头配置:
add_header X-XSS-Protection "1; mode=block" always;
详细解释:
X-XSS-Protection头信息是一种安全策略,用于防止跨站脚本攻击(XSS)的发生。当浏览器收到包含X-XSS-Protection头信息的HTTP响应时,如果检测到潜在的XSS攻击,浏览器会自动阻止页面的渲染,并显示一个警告页面或重定向到其他页面,从而保护用户的安全。
将X-XSS-Protection的值设置为"1; mode=block"可以启用浏览器的内置XSS防护机制,并阻止页面渲染,从而防止潜在的XSS攻击。"1"表示启用XSS防护机制,"mode=block"表示如果检测到潜在的XSS攻击,浏览器会阻止页面渲染。
添加"always"参数可以确保该头信息始终向客户端发送,无论响应状态码是什么。
1.3 检测到目标Content-Security-Policy响应头缺失
修复方法:
nginx 增加响应头配置:
add_header Content-Security-Policy "script-src 'self' 'unsafe-inline' 'unsafe-eval'" always;
详细解释:
Content-Security-Policy头信息是一种安全策略,用于限制页面中可以加载的资源,从而有效地减少恶意攻击的风险。CSP策略指定了允许加载的资源的源,包括脚本、样式、图片、字体、媒体和其他资源。当浏览器收到包含Content-Security-Policy头信息的HTTP响应时,会根据CSP策略限制页面加载的资源。
将Content-Security-Policy的值设置为"script-src 'self' 'unsafe-inline' 'unsafe-eval'"表示允许页面加载与当前页面同源的脚本,以及内联脚本和eval函数的使用。这可以确保页面加载的脚本都是可信的,并限制了注入恶意脚本的可能性。
添加"always"参数可以确保该头信息始终向客户端发送,无论响应状态码是什么。
1.4 检测到目标Referrer-Policy响应头缺失
修复方法:
nginx 增加响应头配置:
add_header Referrer-Policy "origin" always;
详细解释:
Referrer-Policy头信息是一种安全策略,用于控制浏览器在发送Referer HTTP头信息时包含哪些信息。当Referrer-Policy的值为"origin"时,浏览器会在HTTP请求头信息中包含当前请求的页面来源的完整URL,但不包括具体的路径和查询参数。例如,如果当前请求的页面URL为https://example.com/path/to/page,那么浏览器会在Referer HTTP头信息中包含https://example.com,但不包括路径和查询参数。
使用Referrer-Policy头信息可以提高Web应用程序的安全性,防止恶意站点通过Referer HTTP头信息获取用户的敏感信息。将Referrer-Policy的值设置为"origin"可以在一定程度上保护用户的隐私,同时又不影响Web应用程序的正常功能。
添加"always"参数可以确保该头信息始终向客户端发送,无论响应状态码是什么。
1.5 检测到目标X-Permitted-Cross-Domain-Policies响应头缺失
修复方法:
nginx 增加响应头配置:
add_header X-Permitted-Cross-Domain-Policies "master-only" always;
详细解释:
X-Permitted-Cross-Domain-Policies头信息是一种安全策略,用于控制其他域名可以如何使用当前域名的资源。当浏览器收到包含X-Permitted-Cross-Domain-Policies头信息的HTTP响应时,会根据该头信息的值来限制其他域名对当前域名资源的访问。
将X-Permitted-Cross-Domain-Policies的值设置为"master-only"表示只允许当前域名的主站点使用该站点的资源,其他域名不允许使用。这可以有效地限制其他域名对当前域名的资源的访问,从而提高Web应用程序的安全性。
添加"always"参数可以确保该头信息始终向客户端发送,无论响应状态码是什么。
1.6 检测到目标X-Download-Options响应头缺失
修复方法:
nginx 增加响应头配置:
add_header X-Download-Options "noopen" always;
详细解释:
X-Download-Options头信息是一种安全策略,用于控制浏览器如何处理文件下载。当浏览器收到包含X-Download-Options头信息的HTTP响应时,如果该头信息的值为"noopen",表示浏览器不应该自动打开文件,而是应该将文件保存到本地。
将X-Download-Options的值设置为"noopen"可以有效地防止文件被自动打开,从而提高Web应用程序的安全性。
添加"always"参数可以确保该头信息始终向客户端发送,无论响应状态码是什么。
1.7 点击劫持:X-Frame-Options未配置
修复方法:
nginx 增加响应头配置:
add_header X-Frame-Options "sameorigin" always;
详细解释:
X-Frame-Options头信息是一种安全策略,用于控制页面是否可以在iframe中嵌入。当浏览器收到包含X-Frame-Options头信息的HTTP响应时,会根据该头信息的值来判断是否允许页面在iframe中嵌入。
将X-Frame-Options的值设置为"sameorigin"表示只允许页面在与当前页面同源的iframe中嵌入,而不允许在其他域名的iframe中嵌入。这可以有效地防止点击劫持等安全问题。
添加"always"参数可以确保该头信息始终向客户端发送,无论响应状态码是什么。
1.8 检测到目标Strict-Transport-Security响应头缺失
修复方法:
nginx 增加响应头配置:
add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload" always;
详细解释:
STS是一种安全协议,用于保护Web应用程序免受SSL/TLS剥离攻击。当浏览器收到包含STS头信息的HTTPS响应时,会将该网站的所有后续请求都强制使用HTTPS协议,从而提高连接的安全性。
将Strict-Transport-Security的值设置为"max-age=63072000; includeSubdomains; preload"表示启用STS,并将其最长有效期设置为两年(63072000秒),同时包括所有子域名(includeSubdomains)和预加载(preload)。
添加"always"参数可以确保该头信息始终向客户端发送,无论响应状态码是什么。
2、Nginx安全配置样例
http {
autoindex off;
server_tokens off;
client_max_body_size 64m;
# -----------------------------------------
# 1、此处省略其他 http 节点配置
# 2、下面的配置也可以写在 server {} 中
# -----------------------------------------
add_header Content-Security-Policy "script-src 'self' 'unsafe-inline' 'unsafe-eval'" always;
add_header Referrer-Policy "same-origin" always;
add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload" always;
add_header X-Content-Type-Options "nosniff" always;
add_header X-Download-Options "noopen" always;
add_header X-Frame-Options "sameorigin" always;
add_header X-Permitted-Cross-Domain-Policies "none" always;
add_header X-Robots-Tag "none" always;
add_header X-XSS-Protection "1; mode=block" always;
proxy_hide_header X-Powered-By;
fastcgi_hide_header X-Powered-By;
}