通过Nginx配置,禁止访问特定后缀的资源

在一些安全扫描中,经常会遇到提示系统中存在bak备份文件或者压缩文件的安全漏洞,实际可能文件根本不存在,只是因为系统统一对不存在的资源定向到了一个提示资源不存在的页面,但是http状态码是200,导致安全扫描工具误报,这时候可以向安全测试人员说明情况,或者通过Nginx配置禁止对特定后缀资源的访问,这儿就介绍禁止访问的配置方式。

从网上搜索到的大部分都是如下这种千篇一律的配置

location ~ .*\.(rar|zip|gz|tar|7z|xz|bz2|bak)?$
{
    return 403;
}

这种配置使用了正则的匹配方式,location的优先级是比较低的。如果应用使用了更高优先级的配置,这个配置是不起作用的,例如应用实际使用如下配置

location ^~ /demo/ {
		 proxy_set_header Host $host;
		 proxy_set_header X-Real-IP $http_x_forwarded_for;
		 proxy_set_header REMOTE-HOST $http_x_forwarded_for;
		 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
		 proxy_pass http://om_demo_pool/demo/;
}

因为^~的优先级高于正则,所以访问http://127.0.0.1/demo/a.zip时,会直接转发到demo这个应用,而不会返回403。

location优先级请自行百度或者参考https://blog.csdn.net/xy2204/article/details/47749405

这时候有两种解决方式:

1)降低实际应用location配置的优先级,使应用location配置的优先级抵御正则,比如去掉^~,变成 location /demo/ { 。但是这种方式有一定的风险,在访问应用中一些资源的时候因为优先级问题匹配了其他高优先级路径而导致访问不到目标资源

2)不使用统一的location配置,而是在各个应用的location下通过正则过滤url路径,如果以特定字符结尾,返回403,配置如下

location ^~ /demo/ {
	if ($request_uri ~ .*\.(rar|zip|gz|tar|7z|xz|bz2|bak|svn-base)?$) {
            return 403;
    }
	proxy_set_header Host $host;
	proxy_set_header X-Real-IP $http_x_forwarded_for;
	proxy_set_header REMOTE-HOST $http_x_forwarded_for;
	proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
	proxy_pass http://om_demo_pool/demo/;
}

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值