☰
  • 首页
  • 规则分类
  • 项目介绍
search
•••

对资源设定合理的访问权限

1.8 ID_unlimitedAuthority
目录 › next › previous

对资源设定合理的访问权限,避免为攻击者提供不应拥有的权限或能力。

权限的分类包括但不限于:

  • 文件、数据库等资源的读写权限
  • 计算、IO 过程的执行权限
  • 软硬件资源的占用权限

权限设定是产品设计与实现的重要环节,需落实相关的评审与测试。

示例:

#include <stdio.h>

int main() {
    umask(000);                     // Non-compliant
    FILE* fp = fopen("bar", "w");   // Old method
    ....
    fclose(fp);
}

例中 umask 函数开放了所有用户对文件的读写权限,这是很不安全的,进程之间不应直接通过文件通信,应实现安全的接口和交互机制。

由于历史原因,C 语言的 fopen 和 C++ 语言的 fstream 都不能确保文件只能被当前用户访问,C11 提供了 fopen_s,C++17 提供了 std::filesystem::permissions 以填补这方面的需求。

C11 fopen_s 简例:

#define __STDC_WANT_LIB_EXT1__ 1
#include <stdio.h>

int main() {
    FILE* fp = NULL;
    errno_t e = fopen_s(&fp, "bar", "w");   // Good
    ....
    fclose(fp);
}

与 fopen 不同,fopen_s 可以不受 umask 等函数的影响,直接将文件的权限设为当前用户私有,其他用户不可访问,降低了文件被窃取或篡改的风险,是一种更安全的方法。

除此之外,如果需要对资源进行更精细的权限管理,可参见“access control list(ACL)”。

依据

ISO/IEC 9899:2011 K.3.5.2.1(7) ISO/IEC 14882:2017 30.10.15.26

参考

CWE-266 CWE-732 SEI CERT FIO06-C
Copyright©2024 360 Security Technology Inc., Licensed under the Apache-2.0 license.