`
ultrang
  • 浏览: 57763 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

下载任意文件漏洞

阅读更多
我们经常会开发了一个下载功能,具体实现就是后台实现一个下载方法,接收一个带有路径的文件名参数,再通过流将对应的文件返回给客户端。但是这种方式潜在一个安全漏洞——通过修改这个文件名参数的值,可以下载操作系统中当前账号有权访问的任意文件。极有可能造成操作系统内核文件被修改,操作系统密码泄露,web应用文件被修改,WEB应用挂马等多种安全事件。
如何防止下载任意文件呢?
一、限制下载文件的扩展名
String fileName= request.getParameter("fileName");
if(!fileName.endWith(".doc")){
   return null;
}

二、限制下载文件所在的路径
String filePath= fileName.substring(0,fileName.lastIndexOf('\\'));
if(!filePath.startWith("/download")){
   return null;
}

三、防止目录回溯
if(filePath.contains("\\..")){
   return null;
}

四、动态校验码
根据待下载文件,生成MD5摘要或者其他动态验证码算法并将动态校验码融合到下载链接中,客户端浏览器提交下载请求时,再次校验动态验证码。
String md5Code=MD5(file);

http://xxx/download/?fileName=/download/a.doc&code=dgaq2342rjwioafqwewf

String requestCode = request.getParameter("code");
if(code.equals(md5Code)){ 
  download();
}
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics