本文共 1028 字,大约阅读时间需要 3 分钟。
1.缩进是指else if那里?我改一下
2.软连接的文件webserver或者常规的读取确实都访问不到;但是代码里还是有方法去读取的,可以先拿到realpath 再去读取;
public static void main(String[] argv) throws IOException {
Path dirPath = Files.createTempDirectory("test-dir");
Path filePath = Files.createTempFile(dirPath, "test-file", ".txt");
System.out.println("Source path: " + filePath);
//must run as admin
Path symPath = Files.createSymbolicLink(dirPath.resolve("sym-test-file.txt"), filePath);
System.out.println("Symbolic link path: " + symPath);
Path path1 = Files.readSymbolicLink(symPath);
Path path = symPath.toRealPath();
Files.readAllBytes(path);
System.out.println("readSymbolicLink: " + path1);
System.out.println("readSymbolicLink: " + path);
}
这样会有一定风险,如果先把一个要读的文件 比如/etc/passwd 软链接到/tmp/xxx
然后通过传参path=/tmp/xxx ;代码里Files.readSymbolicLink(symPath)或者toRealPath拿到真实路径;再去读取文件,最后http传参路径是/tmp/xxx,文件真实读取路径是/etc/passwd; 通过参数的漏洞检测是匹配不上的;只有靠黑名单;如果源路径不在黑名单,可能会产生检测绕过;
当然这个情况应该比较少;
这个我就不改了;要不要删看你们吧;就一行代码,你们觉得没必要就删掉好了
3.createDirectory放到跨目录? 应该也不合适吧,我理解创建目录也是属于写操作 就放到write里了
4.DELETE忘了拆 ,我拆一下
转载地址:https://blog.csdn.net/weixin_33245447/article/details/114669008 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!