C 和 C++ 的 CodeQL 查询帮助¶
访问以下文章以查看以下查询套件中包含的查询的文档
default
: GitHub 上的 CodeQL 代码扫描默认运行的查询。security-extended
: 来自default
的查询,以及具有略低精度和严重程度的额外安全查询。security-and-quality
: 来自default
、security-extended
的查询,以及额外的可维护性和可靠性查询。
这些查询发布在 CodeQL 查询包 codeql/cpp-queries
中(更改日志,源代码)。
有关可作为构建块在编写自己的查询时使用的较短查询,请参阅 CodeQL 仓库中的示例查询。
- 用 'delete[]' 释放 'new' 对象
- 用 'delete' 释放 'new[]' 数组
- 意外重新抛出
- 二进制位域成员的符号模糊
- 算术运算假定一年有 365 天
- 数组参数大小不匹配
- 在范围检查之前使用数组偏移量
- 赋值而不是预期的比较
- 通过欺骗绕过身份验证
- 避免在 for 循环中使用浮点数
- 奇偶性检查错误
- 整数加法溢出检查错误
- 边界错误的写入
- 包含太多语句的代码块
- 易受跨站脚本攻击的 CGI 脚本
- 对
memset
的调用可能会被删除 - 调用一个或多个参数不兼容的函数
- 在循环中调用 alloca
- 调用带有额外参数的函数
- 调用带有比声明参数更少参数的函数
- HRESULT 与布尔类型之间的转换
- 从 char* 到 wchar_t* 的转换
- 按值捕获异常
- 证书未检查
- 证书结果合并
- 在 SQLite 数据库中明文存储敏感信息
- 在缓冲区中明文存储敏感信息
- 在文件中明文存储敏感信息
- 明文传输敏感信息
- 误导性缩进前的逗号
- 注释掉的代码
- 在循环条件中比较窄类型与宽类型
- 比较结果始终相同
- 比较时,应使用赋值运算符
- 复杂条件
- 常量返回值类型
- 成员的常量返回值类型
- 不执行继续操作的 continue 语句
- 对 'cin' 的危险使用
- 由于 goto 或 break 语句导致的死代码
- 声明隐藏参数
- 声明隐藏变量
- 可疑的 NULL 检查
- 重复的包含保护
- 条件语句的空分支
- 对浮点数进行相等性测试
- 在析构函数中抛出异常
- 将系统数据暴露给未经授权的控制范围
- 表达式无效
- FIXME 注释
- 未使用 HTTPS URL
- 在创建文件时未限制权限
- 使用 O_CREAT 标志打开文件,但未提供 mode 参数
- 在循环体内更改 for 循环变量
- 在代码块中声明函数
- 无用的条件语句
- 从位域隐式向下转换
- 隐式函数声明
- 仅包含头文件
- 复制构造函数和赋值运算符定义不一致('两则规则')
- for 循环方向不一致
- 空值检查不一致
- 对返回值的操作不一致
- 虚拟继承不一致
- 'not' 运算符使用不正确
- 内存分配错误处理不正确
- 构造函数委托不正确
- 对类似 'scanf' 的函数的返回值检查不正确
- 无效的指针解引用
- 不规则的枚举初始化
- 迭代器指向已过期的容器
- 按值传递大对象
- 泄漏捕获
- 可能溢出的写入
- 在非局部内存中存储局部变量的地址
- 局部变量隐藏全局变量
- 较长的 switch case
- 函数结果转换存在信息丢失
- 指针转换存在信息丢失
- new/free 或 malloc/delete 不匹配
- switch 语句中缺少枚举 case
- 缺少包含保护
- 缺少 return 语句
- 缺少对类似 'scanf' 的函数的返回值检查
- 将乘法结果转换为更大类型
- 在调用 CreateProcess 时,使用未引用的路径,应用程序名称为 NULL
- 嵌套循环使用相同的变量
- 接口中不允许使用原始数组
- 没有为零终止符分配空间
- 不允许使用简单的 switch 语句
- 非常量格式字符串
- 基类中的非虚析构函数
- 为指针类型数组分配的内存不足
- 为指针类型分配的内存不足
- 不受控制的分配大小溢出
- 重载的赋值运算符未返回 'this'
- 溢出的写入
- 指针溢出检查
- 文档不完善的大型函数
- 字符串复制中可能错误的缓冲区大小
- 可能存在双重释放
- 可能将敏感系统数据暴露给未经授权的控制范围
- 可能存在释放后使用
- 对 snprintf 的调用可能存在溢出
- 可能存在溢出的写入
- 浮点数到字符串转换可能存在溢出的写入
- 局部变量可能未初始化
- 对 strncat 的调用可能存在安全风险
- 对 strcat 的使用可能存在安全风险
- 重新定义了默认参数
- 由于之前解引用,冗余的空值检查
- 析构函数中未释放资源
- 返回局部 std::string 的 c_str
- 返回在堆栈中分配的内存
- 自比较
- 在 SECURITY_DESCRIPTOR 中将 DACL 设置为 NULL
- 全局名称太短
- 对标志应用短路运算符
- 按位运算的符号检查
- 带符号溢出检查
- sizeof 带有副作用
- 切片
- 静态数组访问可能导致溢出
- 可疑的 'sizeof' 使用
- 与 sizeof 相加的可疑情况
- 可疑的指针缩放
- 对 void 的可疑指针缩放
- 抛出指针
- 检查时-使用时文件系统竞争条件
- 格式化函数的参数太少
- 格式化函数的参数太多
- 类型混淆
- 无界写入
- 对时间转换函数的返回值未检查
- 比较优先级不明确
- SQL 查询中的不受控制的数据
- 算术表达式中的不受控制的数据
- 在 OS 命令中使用不受控制的数据
- 在路径表达式中使用不受控制的数据
- 不受控制的格式字符串
- 不受控制的进程操作
- 无序的多重继承
- 在构造函数中不安全的使用 this
- 无符号与零比较
- 无符号差值表达式与零比较
- 未终止的可变参数调用
- 条件的不可信输入
- 未使用局部变量
- 未使用静态函数
- 未使用静态变量
- 在指针运算中使用向上转换后的数组
- 使用已损坏或存在风险的加密算法
- 使用密钥长度不足的加密算法
- 使用存在 Heartbleed 漏洞的 OpenSSL 版本
- 使用危险的函数
- 使用已过期的堆栈地址
- 使用 goto
- 使用整数而不是枚举
- 使用可能存在危险的函数
- 在生命周期结束后使用字符串
- 在条件语句中使用字符串复制函数
- 在生命周期结束后使用唯一指针
- 变量在其自身的初始化器中使用
- 从构造函数或析构函数进行虚拟调用
- 向格式化函数传递错误类型的参数
- XML 外部实体扩展
- 在不检查闰年的情况下,使用算术运算修改年份字段
- boost::asio TLS 设置配置错误
- boost::asio 使用已弃用的硬编码协议