日期:2014-05-18  浏览次数:20686 次

(安全问题)服务器端生成的临时文件如何屏蔽“直接访问“
现在遇到一个安全性的问题,局例子说明吧。
A用户用管理员权限使用了一个功能,生成了公司的报表(CSV文件)。这个报表是以临时文件的方式生成在服务器端,download到客户端。现在的问题是,B用户可以直接在地址栏里面输入地址,就可以合法的取得这个报表。

我想,这种问题很常见吧,鄙人才接触这种cs架构的项目不久,请求各位前辈多帮助。问了2位同学,他们给了我几个选择。
①把这个放临时文件的文件夹放到   WEB-INF目录下
②下载完了删除
③直接在内存中以流的形式下载,不生成具体文件
现在方法①我实验了一下,没有成功,哪一位在具体说说。
方法②③不通过,客户要求要生成这个临时文件。

我觉得这是个安全设置问题。所以请求诸位给与帮助~


------解决方案--------------------
过滤器来做的话应该不难啊
只只要检查对应的文件是否属于B用户的,如果是转向这个文件,不是就转到错误页面
------解决方案--------------------
想屏蔽 从地址栏直接输入的这种方式是无法实现的, 你不能阻止客户端的用户做什么事情

你可以用加密方法修改文件名称使得客户端很难猜测文件名+设置filter阻止用户访问URL
------解决方案--------------------
①把这个放临时文件的文件夹放到 WEB-INF目录下

用这个方法吧,WEB-INF目录下的文件用户不能直接访问,即不能http://xxx.xx.xx/xx.xls方式获得,只能通过你提供的下载程序获取,例如:http://xxx.xx.xx/getfile?name=xx.xls。
getfile程序自己写个SERVLET,根据用户请求的文件名称,检查用户权限,检查referer,如果referer为null或者不是从xxx.xx.xx来则禁止下载,,满足权限条件后getfile读该文件,写到请求相应对象。