从世界可写文件读取¶
ID: java/world-writable-file-read
Kind: problem
Security severity: 7.8
Severity: error
Precision: high
Tags:
- security
- external/cwe/cwe-732
Query suites:
- java-code-scanning.qls
- java-security-extended.qls
- java-security-and-quality.qls
从世界可写文件读取在多用户系统上很危险,因为其他用户可以通过修改或删除文件来影响程序执行。
建议¶
除非该文件旨在由多用户系统上的多个用户写入,否则不要将文件显式设置为世界可写。在许多情况下,该文件可能只需要对当前用户可写。
对于某些文件系统,可能存在设置文件为世界可写的替代方法。例如,POSIX 文件系统支持“组”,可用于确保只有所有用户的一个子集可以写入该文件。访问控制列表 (ACL) 可用于许多操作系统和文件系统组合,并且可以在不诉诸世界可写权限的情况下提供细粒度的读写支持。
示例¶
在以下示例中,我们从文件中加载一些配置参数
private void readConfig(File configFile) {
if (!configFile.exists()) {
// Create an empty config file
configFile.createNewFile();
// Make the file writable for all
configFile.setWritable(true, false);
}
// Now read the config
loadConfig(configFile);
}
如果配置文件尚不存在,则会创建一个空文件。创建空文件可以简化后续代码,并且对用户来说是一种便利。但是,通过将文件设置为世界可写,我们允许系统上的任何用户修改配置,而不仅仅是当前用户。如果系统上可能存在不可信用户,这将非常危险。
参考¶
SEI CERT Oracle Java 编码标准:FIO01-J. 使用适当的访问权限创建文件.
常见漏洞枚举:CWE-732.