无限星辰工作室-客户无限互联网动力之源

标题: Nginx 安全配置建议(2024-4-10更新) [打印本页]

作者: crx349    时间: 2022-2-27 22:43
标题: Nginx 安全配置建议(2024-4-10更新)
1.nginx.conf

  1. http
  2.     {
复制代码

内添加

  1. add_header X-Frame-Options "SAMEORIGIN";
  2. add_header X-XSS-Protection "1; mode=block";
  3. add_header X-Content-Type-Options "nosniff";
  4. 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站点配置中加入
  1. location = /robots.txt {
  2.     if ($http_user_agent !~* "spider|bot|yahoo|sogou") {
  3.         return 404;
  4.     }
  5. }
复制代码


3.Nginx后端服务指定的Header隐藏状态
隐藏Nginx后端服务X-Powered-By头
隐藏Nginx后端服务指定Header的状态: 1、打开conf/nginx.conf配置文件(或主配置文件中的inlude文件); 2、在http下配置proxy_hide_header项; 增加或修改为
  1. proxy_hide_header X-Powered-By;
  2. 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)联合复现
若存在以下类似的配置建议删除

  1. location ~ [^/]\.php(/|$) {
  2.         fastcgi_split_path_info ^(.+?\.php)(/.*)$;
  3.         fastcgi_param PATH_INFO       $fastcgi_path_info;
  4.         fastcgi_pass   php_ip:9000;
  5.         ...
  6.   }
  7. }
复制代码

删除前评估风险,请确保业务连续性,建议备份后删除

5.任意文件读取
缺少斜杠可能导致目录穿越
  1. location /path {
  2. alias /home/;
  3. }
  4. location /files{
  5. root /;
  6. }
复制代码


如上配置

建议

把location /path改为location /path/的格式,以/结尾 把root /;改为root /path/; 的格式

6.隐藏Nginx服务的Banner
Nginx服务的Banner隐藏状态
Nginx后端服务指定的Header隐藏状态隐藏Nginx服务Banner的状态: 1、打开conf/nginx.conf配置文件; 2、在server栏目下,配置server_tokens项
  1. server_tokens off;
复制代码


7.Nginx/OpenResty在特殊配置下存在内存泄漏或目录穿越漏洞

Nginx 的 rewrite 指令在没有检查用户输入的情况下,会导致目录穿越
升级版本至 最新版本 或禁用类似配置

  1. location ~ /memleak {
  2.     rewrite_by_lua_block {
  3.         ngx.req.read_body();
  4.         local args, err = ngx.req.get_post_args();
  5.         ngx.req.set_uri( args["url"], true );
  6.     }
  7. }

  8. location ~ /rewrite {
  9.     rewrite ^.*$ $arg_x;
  10. }
复制代码



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配置文件内加入
  1. if ($http_Host !~* ^www.xmspace.net$|^xmspace.net$) {
  2.                 return          403;
  3.         }
复制代码



“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,并不限制内容加载来源。




欢迎光临 无限星辰工作室-客户无限互联网动力之源 (https://xmspace.net/) Powered by Discuz! X3.4