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

vdzxcuhz  于 2021-07-06  发布在  Java
关注(0)|答案(1)|浏览(539)

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

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

根据扫描结果,问题如下:
软件允许用户输入控制或影响文件系统操作中使用的路径或文件名。这可能使攻击者能够访问或修改系统文件或对应用程序至关重要的其他文件。
解决这个问题的最好办法是什么?我在SpringBootJava应用程序中。建议的解决方案之一是使用accessreferencemap,它是如何工作的?

rekjcdws

rekjcdws1#

owasp安全指南中讨论了此问题。根据应用程序的主机操作系统,解决方案可能有点不同,但这里有一些常见的指导原则-
如果可能,尽量避免从用户那里获取文件路径。评估是否有其他解决方案,而不要求用户输入服务器上的路径。我不知道你的设想的全部内容,但大多数情况下它是可以实现的。也许您可以基于用户id将报表存储在服务器路径上,例如user1文件将存储在/user/tmp/user1下,这将消除要求用户输入完整路径或绝对路径的问题。
在服务器端尽可能多地验证用户输入。这将尽可能限制用户访问。例如,如果希望用户访问pdf,则添加验证以检查以.pdf结尾的用户输入数据
永远不要将用户输入直接传递到文件系统api。在将其发送到文件系统api之前,先使用预定义的路径作为前缀。
请确保您的文件系统api是在受限制的操作系统用户可以访问特定路径的情况下读取/写入的,在该路径中,您只存储用户所需的文件。
您可以在此处阅读有关此漏洞和解决方案的更多信息

相关问题