记一次File 文件安全性检查fix

背景

当前Struts框架中有一段common逻辑的get file 的 .do 代码,是根据reqeust中穿的parameter来索引server中的静态文件比如pdf ,image ,由此衍生出可以通过拼接当前路径可以尝试访问其他本应无权访问的文件例如 C:/Users/XXXX/Desktop/…/package-lock.json
filename 拼接逻辑不可变,因为是高可用common get file的代码

拼接逻辑 :

本地properties 读取前一部分文件路径(环境隔离)+ 参数传入后一部分文件路径及文件名

原本思路:

遍历properties 读取的前一部分文件路径 文件, foreach 校验当前传入的filename 是否存在

最终解决:

使用file 内部自带的方法 : file.getCanonicalPath(); 以及 file.getAbsolutePath(); 进行比对
getCanonicalPath 会自动去除 …/ 并生成编译后的新路径 如 : C:/Users/XXXX/Desktop/…/package-lock.json -->C:/Users/hz03178/package-lock.json
将此路径与原本的getAbsolutePath 进行比对,若不一致,则认为是非法get 文件操作

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值