Python 的 CodeQL 查询帮助¶
访问以下文章以查看以下查询套件中包含的查询的文档
default
:在 GitHub 上的 CodeQL 代码扫描中默认运行的查询。security-extended
:来自default
的查询,以及具有稍低精度和严重程度的额外安全查询。security-and-quality
:来自default
、security-extended
的查询,以及额外的可维护性和可靠性查询。
这些查询发布在 CodeQL 查询包 codeql/python-queries
中 (变更日志,源代码)。
有关可以在编写自己的查询时用作构建块的较短查询,请参阅 CodeQL 存储库中的示例查询。
- 使用 “apply” 函数
- 在 finally 中使用 “break” 或 “return” 语句
- “import *” 可能污染命名空间
- 在 Python 2 中使用 “input” 函数
- 在旧式类中使用 “super”
- 使用 Paramiko 时接受未知 SSH 主机密钥
- 断言语句有副作用
- 在 tarfile 提取期间进行任意文件写入
- 断言元组
- 正则表达式中的退格转义
- 糟糕的 HTML 过滤正则表达式
- 将套接字绑定到所有网络接口
- CSRF 防护减弱或禁用
- 敏感信息的明文记录
- 敏感信息的明文存储
- 代码注入
- 注释掉的代码
- 常量比较
- 相同值的比较
- 当操作数支持
__eq__
时,使用 is 进行比较 - 基类中的冲突属性
- 令人困惑的八进制字面量
- 条件表达式或语句中的常量
- 循环导入
- SSL/TLS 的默认版本可能不安全
- 已弃用的切片方法
- 用户控制数据的反序列化
- 字典字面量中的重复键
- 正则表达式字符类中的重复
- 空的 except
- 编码错误
- Except 块处理 “BaseException”
- 未定义显式导出
- 显式返回与隐式返回(贯穿)混合使用
- 文件并非总是关闭
- super() 的第一个参数不是封闭类
- 类方法的第一个参数不是命名为 “cls”
- 方法的第一个参数不是命名为 “self”
- Flask 应用程序在调试模式下运行
- 格式化对象不是映射
- 格式化字符串混合使用隐式和显式编号的字段
- 完整的服务器端请求伪造
- HTTP 响应拆分
- 硬编码凭据
- 非法 raise
- 列表中的隐式字符串串联
- 导入已弃用的模块
- 导入可变属性的值
- 不精确的断言
- 不完整的 URL 子字符串清理
- 不完整的排序
- 不完整的主机名正则表达式
- 不一致的相等和哈希
- 不一致的相等和不相等
- 不一致的方法解析顺序
- 低效的正则表达式
- 通过异常泄露信息
- 不安全的临时文件
- 可迭代对象可以是字符串或序列
- 迭代器没有从
__iter__
方法返回 self - 使用 autoescape=False 的 Jinja2 模板
- 从用户控制的来源构建 LDAP 查询
- 列表推导变量在封闭范围内使用
- 日志注入
- 循环变量捕获
- 可能在比较中缺少 “self”
- 使用非容器进行成员资格测试
- 重写方法的签名和使用之间不匹配
- 重写方法的签名和使用之间不匹配
- 多重赋值不匹配
- 在对象销毁期间缺少对
__del__
的调用 - 在对象初始化期间缺少对
__init__
的调用 - 格式化调用中缺少命名参数
- 正则表达式中缺少特殊组的一部分
- 修改 locals() 返回的字典
- 修改具有默认值的参数
- 模块导入自身
- 模块被导入多次
- 模块使用 “import” 和 “import from” 导入
- 模块级循环导入
- 在对象销毁期间多次调用
__del__
- 在对象初始化期间多次调用
__init__
- 在
__get__
或__set__
方法中修改描述符。 - 具有相同变量的嵌套循环
- 在内部循环体之后重用相同变量的嵌套循环
- NoSQL 注入
- 调用不可调用对象
- “except” 子句中没有异常
- 在 for 循环中使用不可迭代对象
- 在特殊方法中引发非标准异常
- NotImplemented 不是异常
- 过于复杂的
__del__
方法 - 过于宽松的文件权限
- 过于宽松的正则表达式范围
- 在超类或子类中覆盖属性
- 由于使用不当导致的 PAM 授权绕过
- 部分服务器端请求伪造
- 在不受控制的数据上使用多项式正则表达式
- 可能未初始化的局部变量
- 旧式类中的属性
- 使用次优数值的勾股定理计算
- 引发元组
- 冗余赋值
- 冗余比较
- 反射的服务器端跨站脚本
- 正则表达式注入
- 未经证书验证的请求
- 整数除法的结果可能被截断
- 返回长度不同的元组
- 从用户控制的来源构建 SQL 查询
- 应该使用 “with” 语句
- 重写方法中的签名不匹配
- 特殊方法的签名不正确
- 语句没有效果
- 超类属性遮蔽子类方法
- 可疑的未使用循环迭代变量
- 语法错误
- 测试与 None 的相等性
- 格式化调用中参数太少
- 来自远程源的 URL 重定向
- 不受控制的命令行
- 路径表达式中使用不受控制的数据
- 生成器中没有保护的 next
- 对不可散列对象进行散列
- 正则表达式中不匹配的插入符号
- 正则表达式中不匹配的美元符号
- 循环中不必要的 “else” 子句
- 函数中不必要的 delete 语句
- 不必要的 lambda
- 不必要的 pass
- 不可到达的 “except” 块
- 不可到达的代码
- 从库输入构建的不安全的 shell 命令
- 不支持的格式字符
- 格式化调用中未使用参数
- 未使用异常对象
- 未使用全局变量
- 未使用导入
- 未使用局部变量
- 格式化调用中未使用命名参数
- 在模块级别使用 “global”
- 在函数外部使用 “return” 或 “yield”
- 使用损坏或弱的加密算法
- 在敏感数据上使用损坏或弱的加密哈希算法
- 在模块级别使用 print 语句
- 使用未定义的占位符变量
- 使用 exit() 或 quit()
- 使用不安全的 SSL/TLS 版本
- 使用过程的返回值
- 使用弱的加密密钥
- 变量被多次定义
- 调用中参数名称错误
- 类实例化中参数名称错误
- 格式化参数数量错误
- 调用中参数数量错误
- 类实例化中参数数量错误
- XML 外部实体扩展
- XML 内部实体扩展
- 从用户控制的来源构建 XPath 查询
__del__
被显式调用- 在添加属性时没有重写
__eq__
__init__
方法调用重写的方法__init__
方法是一个生成器__init__
方法返回一个值__iter__
方法返回非迭代器- 旧式类中的
__slots__