最近在看一个中等规模的源码。发现它存在一些错误的代码防御手段。因此列举一处出来。都还是比较基础简单。
防止目录穿越(这里是一处文件下载功能)
if (path.startsWith("/") || path.startsWith("./") ||path.startsWith("../"))
return;
if (FileName.startsWith("/") || FileName.startsWith("./") || FileName.startsWith("../"))
return;
这个显而易见不能成功防御目录穿越漏洞的。
为什么呢。
-
在不同的操作系统中,文件路径分隔符可能不同(例如,Windows使用反斜杠 ,而Unix/Linux使用正斜杠 /)。实际情况下:在windows上使用 / 作为文件路径分割符都可以识别成功。
-
编码问题:在Web应用中,用户输入的路径可能经过URL编码。因此,需要检测编码防止编码绕过。
文件处理方式
有时候我们上传一个asp/jsp/php,成功传上去也知道文件路径,但是访问路径结果下载到本地了。这种情况下就是后端对不同文件处理方式不同导致的。
文件是在线读取还是下载:
Content-Disposition设置为attachment 下载
Content-Disposition为inline。在线读取
如处理文件代码:
response.setHeader("Content-Disposition", "attachment; filename="example.txt"");
原文始发于微信公众号(天才少女Alpha):审计之代码防御错误示范【1】
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论