背景
当前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 文件操作