Nginx 安全配置建议(2024-4-10更新)
1.nginx.conf在
http
{
内添加
add_header X-Frame-Options "SAMEORIGIN";
add_header X-XSS-Protection "1; mode=block";
add_header X-Content-Type-Options "nosniff";
add_header Content-Security-Policy "default-src 'self'";
X-Frame-Options
X-Frame-Options 响应头有三个可选的值:
DENY:页面不能被嵌入到任何iframe或frame中;
SAMEORIGIN:页面只能被本站页面嵌入到iframe或者frame中;
ALLOW-FROM:页面允许frame或frame加载。
X-XSS-Protection
顾名思义,这个响应头是用来防范XSS的。最早我是在介绍IE8的文章里看到这个,现在主流浏览器都支持,并且默认都开启了XSS保护,用这个header可以关闭它。它有几种配置:
0:禁用XSS保护;
1:启用XSS保护;
1; mode=block:启用XSS保护,并在检查到XSS攻击时,停止渲染页面(例如IE8中,检查到攻击时,整个页面会被一个#替换);
X-Content-Type-Options
互联网上的资源有各种类型,通常浏览器会根据响应头的Content-Type字段来分辨它们的类型。例如:"text/html"代表html文档,"image/png"是PNG图片,"text/css"是CSS样式文档。然而,有些资源的Content-Type是错的或者未定义。这时,某些浏览器会启用MIME-sniffing来猜测该资源的类型,解析内容并执行。
例如,我们即使给一个html文档指定Content-Type为"text/plain",在IE8-中这个文档依然会被当做html来解析。利用浏览器的这个特性,攻击者甚至可以让原本应该解析为图片的请求被解析为JavaScript。通过下面这个响应头可以禁用浏览器的类型猜测行为
此标头防止基于“MIME”的攻击。此标头防止InternetExplorer从声明的内容类型之外嗅探响应,因为标头指示浏览器不要覆盖响应内容类型。使用nosniff选项,如果服务器说内容是text/html,浏览器将将其呈现为text/html。
2.禁止非蜘蛛访问robots.txt
nginx站点配置中加入
location = /robots.txt {
if ($http_user_agent !~* "spider|bot|yahoo|sogou") {
return 404;
}
}
3.Nginx后端服务指定的Header隐藏状态
隐藏Nginx后端服务X-Powered-By头
隐藏Nginx后端服务指定Header的状态: 1、打开conf/nginx.conf配置文件(或主配置文件中的inlude文件); 2、在http下配置proxy_hide_header项; 增加或修改为 proxy_hide_header X-Powered-By;
proxy_hide_header Server;
4.PHP-fpm 远程代码执行漏洞
攻击者可以使用换行符(编码格式为%0a)来破坏`fastcgi_split_path_info`指令中的regexp,regexp损坏将导致空PATH_INFO,从而触发该漏洞
另外该漏洞为漏洞链条中的一环,属脆弱性,需与php(PHP 5.6,PHP 7.0 、PHP 7.1 、PHP 7.2 、PHP 7.3)联合复现
若存在以下类似的配置建议删除
location ~ [^/]\.php(/|$) {
fastcgi_split_path_info ^(.+?\.php)(/.*)$;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_pass php_ip:9000;
...
}
}
删除前评估风险,请确保业务连续性,建议备份后删除
5.任意文件读取
缺少斜杠可能导致目录穿越
location /path {
alias /home/;
}
location /files{
root /;
}
如上配置
建议
把location /path改为location /path/的格式,以/结尾 把root /;改为root /path/; 的格式
6.隐藏Nginx服务的Banner
Nginx服务的Banner隐藏状态
Nginx后端服务指定的Header隐藏状态隐藏Nginx服务Banner的状态: 1、打开conf/nginx.conf配置文件; 2、在server栏目下,配置server_tokens项 server_tokens off;
7.Nginx/OpenResty在特殊配置下存在内存泄漏或目录穿越漏洞
Nginx 的 rewrite 指令在没有检查用户输入的情况下,会导致目录穿越
升级版本至 最新版本 或禁用类似配置
location ~ /memleak {
rewrite_by_lua_block {
ngx.req.read_body();
local args, err = ngx.req.get_post_args();
ngx.req.set_uri( args["url"], true );
}
}
location ~ /rewrite {
rewrite ^.*$ $arg_x;
}
nginx 至 1.13.2 Range Filter Request 整数溢出漏洞
描述
在Nginx标准模块中,如果攻击者从缓存返回响应,则可以获取缓存文件头。黑客可以通过缓存文件头获取后端服务器的IP地址或其他敏感信息,从而导致信息泄露。
检查提示
1.8.1
加固建议
Nginx以下版本存在漏洞,容易被入侵 1.13.2之前版本 Nginx范围过滤器模块中存在整数溢出漏洞,允许远程攻击者利用漏洞提交特殊的请求,获取敏感信息或使应用程序崩溃。 如当前版本不方便升级,建议在配置文件server段新增,max_ranges 1(禁用multipart range分片功能,注意评估风险) 或直接升级到最新版本以确保安全性
目标URL存在http_host头攻击漏洞
nginx.conf 下 站点的http配置文件内加入
if ($http_Host !~* ^www.xmspace.net$|^xmspace.net$) {
return 403;
}
“Content-Security-Policy”头缺失
default-src 'self';只允许同源下的资源
script-src 'self';只允许同源下的js
script-src 'self' www.google-analytics.com ajax.googleapis.com;允许同源以及两个地址下的js加载
default-src 'none'; script-src 'self'; connect-src 'self'; img-src 'self'; style-src 'self';多个资源时,后面的会覆盖前面的
4、在nginx配置文件中添加,例如:
add_header Content-Security-Policy "default-src 'self'";只允许同源下的资源
add_header Content-Security-Policy "upgrade-insecure-requests;content *";将本站内部http链接自动改为https,并不限制内容加载来源。
页:
[1]