首页 > 解决方案 > 如何解决在 Java 代码中创建具有指定名称的文件时的安全漏洞?

问题描述

安全码扫描不喜欢以下 Java 代码:

File localCsvFile = new File(MessageFormat.format(REPORT_ZIP_PATH_FORMAT,
            REPORT_LOCAL_PATH, str1, str2, count));

根据扫描,问题如下:

该软件允许用户输入来控制或影响文件系统操作中使用的路径或文件名。这可能允许攻击者访问或修改对应用程序至关重要的系统文件或其他文件。

解决此问题的最佳方法是什么?我在 Spring Boot Java 应用程序中。建议的解决方案之一是使用 AccessReferenceMap,它是如何工作的?

标签: javaspring-bootsecuritycontent-security-policy

解决方案


OWASP 安全指南中讨论了这个问题。根据应用程序的主机操作系统,解决方案可能会略有不同,但这里有一些通用指南 -

  • 如果可能,尽量避免从用户那里获取文件路径。在不要求用户输入服务器上的路径的情况下评估是否有任何替代解决方案。我没有你的场景的完整背景,但大多数时候它是可以实现的。也许您可以根据用户 ID 将报告存储在服务器路径上,例如 user1 文件将存储在 /user/tmp/user1 下,这将消除要求用户输入完整路径或绝对路径。

  • 尽可能在服务器端验证用户输入。这将尽可能地限制用户访问。例如,如果希望用户访问 pdf,则添加验证以检查用户输入数据是否以.pdf结尾

  • 永远不要将用户输入直接传递给文件系统 API。在将其发送到文件系统 API 之前,使用预定义的路径为其添加前缀。

  • 确保您的文件系统 API 正在使用受限操作系统用户读取/写入,该用户有权访问您仅存储用户所需文件的特定路径。

您可以在此处阅读有关此漏洞和解决方案的更多信息


推荐阅读