CodeQL 文档

从世界可写文件读取

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

点击查看 CodeQL 代码库中的查询

从世界可写文件读取在多用户系统上很危险,因为其他用户可以通过修改或删除文件来影响程序执行。

建议

除非该文件旨在由多用户系统上的多个用户写入,否则不要将文件显式设置为世界可写。在许多情况下,该文件可能只需要对当前用户可写。

对于某些文件系统,可能存在设置文件为世界可写的替代方法。例如,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);
}

如果配置文件尚不存在,则会创建一个空文件。创建空文件可以简化后续代码,并且对用户来说是一种便利。但是,通过将文件设置为世界可写,我们允许系统上的任何用户修改配置,而不仅仅是当前用户。如果系统上可能存在不可信用户,这将非常危险。

参考

  • ©GitHub, Inc.
  • 条款
  • 隐私