SV.IL.FILE

将文件名重新作为内部文件名或临时文件名提供给用户时,会出现该错误。

从 2023.2 版本开始,此检查器将支持 Jakarta EE。

漏洞与风险

攻击者可以利用重新提供给用户的文件名来预测其他文件名,例如预测下一个临时文件的名称。随后可将该信息用于进行未经授权的访问,例如查看其他用户的秘密数据。此信息还会公开目录结构,如果代码存在路径注入漏洞,则攻击者可由此发动路径操纵攻击。该漏洞也称为“路径泄露”漏洞。

Klocwork 安全漏洞 (SV) 检查器可识别可能创建危险数据的调用;这些调用被视为不安全的来源。用户所提供的任何数据都可能是不安全的来源,因为用户可能是攻击者,或者可能引入人为错误。

缓解与预防

一定不要将完整的文件名或临时文件名重新提供给用户。出于调试目的,使用服务器日志,而不是使用用户屏幕。

示例 1

复制
     protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
         // use user Name as the unique prefix
         String debug = req.getParameter("debug");
         File file = File.createTempFile("tempfile", ".tmp");
         if (debug.equals("true")) {
             resp.getOutputStream().print("Using " + file.toString());
         }
         // ...
         file.delete();
     }

针对第 17 行报告 SV.IL.FILE:在第 15 行中创建的临时文件 file 的名称遭到泄露。攻击者可以利用这一敏感信息预测其他文件的位置,从而进行未经授权的访问。

安全培训

应用程序安全培训材料由 Secure Code Warrior 提供。

扩展

此检查器可通过 Klocwork 知识库进行扩展。有关详情,请参阅调整 Java 分析。