java - 如何解决在 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 正在使用受限操作系统用户读取/写入,该用户有权访问您仅存储用户所需文件的特定路径。
您可以在此处阅读有关此漏洞和解决方案的更多信息
推荐阅读
- visual-studio-code - 创建我的第一个 ERC721 收藏品系列(VS CODE)//Need Advice
- powershell - 安装模块在哪里
从中获取模块? - entity-framework - Linq .NET 5 中的 DatePart 函数使用可变间隔
- javascript - 重新设计表单/提交/ajax 到 onclick 按钮
- aws-amplify - AWS Amplify - 如何让无服务器容器访问非放大托管资源
- postgresql - “找不到本地 psql 命令”错误 Mac
- flutter - 在 Flutter 中渲染大量简单形状的最有效方法
- c - 我有一个任务是编写一个关于 maclaurin 系列的 C 程序,特别是 Sin X 程序。我不知道我做错了什么
- python - K-Means 应该以多快的速度聚集图像中的彩色像素
- javascript - JS 正则表达式匹配括号之间的最后一次出现