问题背景:
当服务器文件可以被直接ip+路径访问时,这时服务器文件是不安全的,那么如何解决此类问题?刚好最近项目有这么个需求,自己的demo实现可以供大家参考,有相关问题或其他方案可以互相了解和学习。
Nginx配置:
目的:
通过Nginx判断访问用户文件路径是否带了参数,如果没带立即返回403,可以防止大量恶意访问,缩短请求调用链,降低后端服务器请求访问量。
使用Nginx配置屏蔽路由:
location ^~ /woshipingbistr/ { proxy_pass http://127.0.0.1:9971/File/group1/; }
按真实资源路径访问:
切换为代理路径访问:
添加参数校验逻辑:
location ^~ /woshipingbistr/ { set $flag 0; if ($args ~* userid=(\w+?)(&|$) ) { set $flag "${flag}1"; } if ($args ~* token=(\w+?)(&|$) ) { set $flag "${flag}1"; } if ($flag != "011"){ return 403; } proxy_pass http://127.0.0.1:9971/File/group1/; }
再次使用上面的url访问:
加上参数和任意value:
http://localhost:8800/woshipingbistr/3f272c8ac1295341c10785ac030e695f.jpeg?userid=1&token=1111
增加拦截器:
目的:
对Nginx转发的请求做权限校验,符合的重定向到真是路径并返回,不符合的返回403。
配置拦截url:
再次使用之前为通过Nginx简单校验随便加的参数值访问:
使用和后端固定匹配值的参数值访问时: