使用Nginx对静态资源鉴权

您所在的位置:网站首页 如何获取代理权 使用Nginx对静态资源鉴权

使用Nginx对静态资源鉴权

2023-10-17 07:35| 来源: 网络整理| 查看: 265

需求问题

公司渗透测试扫描发现了一个未授权访问文件的问题,即外网可以通过文件地址直接访问文件服务器中文件,无需任何认证,造成公司敏感数据泄露。

问题分析 当前获取文件的流程如下

我们的文件地址形如:http://x.x.x.x:5001/filefolder/folder1/folder2/aaa.doc(x.x.x.x是应用服务器IP) 1)请求地址到应用服务器。 2)应用服务器再通过nginx转发到文件服务器(y.y.y.y),获取到对应文件。 3)获取到文件后直接返回,如果是返回前端,即可做图片预览,文件下载,视频播放等功能。此外中台应用功能,如发送邮件时,也是直接调用的文件地址获取附件。 该地址是在应用服务器通过nginx直接转发到文件服务器的,没有经过应用系统鉴权,好处就是获取文件无需暂用应用服务器带宽,速度较快。但也产生了未授权访问的问题。 在这里插入图片描述

解决方案 方案1

应用服务器增加接口,所有文件都从该接口转发到文件服务器获取,并以文件流的方式返回。该方式需占用大量带宽,且前后台所有请求文件服务器的代码都需调整,后考虑使用方案二。

方案2

方案2是基于该篇文章(https://www.cnblogs.com/JQ04/p/15905762.html)调整的。 1)请求的文件地址保持不变,先跳转至应用服务器的nginx 2)转换请求路径。因为后续要请求后端进行鉴权,而http://x.x.x.x:5001/filefolder/folder1/folder2/aaa.doc的请求方式不满足后端接口形式,因此跳转前将该请求转换成了get请求入参的方式:http://x.x.x.x:5001/filefolder?addr=/folder1/folder2/aaa.doc。 3)应用服务器nginx再路由至应用做鉴权,鉴权通过后重定向会nginx服务器配置的静态资源路径。 4)再由应用服务器跳转至文件服务器获取文件。 流程如下: 在这里插入图片描述

具体实现 应用服务器nginx配置 server{ listen 5001; # 文件路径前缀 location /filefolder{ # 此步骤是经文件路径转换成get请求带入参的格式。 proxy_pass http:x.x.x.x:5001/ftpFile?addr=; } # 鉴权前缀 location /ftpFile{ proxy_redirect off; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # 指定提供文件鉴权服务的地址 proxy_pass http://x.x.x.x:5002/servername/ftpFile; } # 静态资源前缀 location /filefolder_static/{ internal; proxy_pass http://y.y.y.y:5123/filefolder/; #代理的静态文件目录 } } 中台鉴权

中台鉴权代码参考文章:https://www.cnblogs.com/JQ04/p/15905762.html 与该文章不同点: 1)前端请求文件地址时,带有cookie,通过cookie进行鉴权 2)中台请求文件地址时,无cookie,因此在鉴权接口上增加了authkey字段,要求中台传文件地址时制定传一个key。中台请求格式如下:

http://x.x.x.x:5001/filefolder/folder1/folder2/aaa.doc&authKey=xxxxxxxx

该路径经过nginx转换参数变为

http://x.x.x.x:5001/filefolder?addr=folder1/folder2/aaa.doc&authKey=xxxxxxxx

在鉴权接口中判断authKey正确后,即为鉴权通过。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3