SV.DOS.TMPFILEDEL

计划在退出时删除临时文件但是并未明确将其删除时,会出现该错误。该错误主要表示服务器或伺服小程式上下文中的问题。

漏洞与风险

应该尽快删除临时文件。如果文件包含敏感信息,那么它存在的时间越长,攻击者越有可能访问其内容。而且,因为目录通常会限制允许的文件的数量,所以可能会超出临时文件的数量,从而导致拒绝服务 (DoS) 问题。

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

缓解与预防

应该在用过之后立即删除临时文件。

示例 1

复制
     protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
         String name = req.getParameter("userName");
         File file = File.createTempFile("file", ".dat");
         file.deleteOnExit();
         fillWithUserData(name);
         char[] data = readData(file);
         resp.getWriter().print(data);
     }

针对第 19 行报告 SV.DOS.TMPFILEDEL:文件“file”计划在“退出时删除”,这表示它会在 jvm 的生存期中保留(如果是服务器或伺服小程式的生存期可能很长)。服务器端应用程序应显式移除文件。

扩展

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