如何解决在Java代码中创建具有指定名称的文件时出现的安全漏洞



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

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

根据扫描,问题如下:

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

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

OWASP安全指南中讨论了此问题。根据应用程序的主机操作系统,解决方案可能会有所不同,但以下是一些常见的指导原则-

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

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

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

  • 确保您的文件系统API是由一个有权访问特定路径的受限操作系统用户进行读/写的,在该路径中您只存储用户所需的文件。

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

最新更新