Java 和 Kotlin 的 CodeQL 查询帮助¶
访问以下文章以查看以下查询套件中包含的查询的文档
default
: GitHub 上 CodeQL 代码扫描默认运行的查询。security-extended
: 来自default
的查询,以及精度和严重性稍低的额外安全查询。security-and-quality
: 来自default
、security-extended
的查询,以及额外的可维护性和可靠性查询。
这些查询发布在 CodeQL 查询包 codeql/java-queries
中 (变更日志,源代码)。
对于您可以用作编写自己的查询的构建块的较短查询,请参阅 CodeQL 存储库中的示例查询。
- 通过 JavaScript 暴露访问 Java 对象方法
- 访问不受支持的 JDK 内部 API
- Android APK 安装
- Android 意图重定向
- Android WebSettings 文件访问
- Android WebView JavaScript 设置
- Android WebView 设置允许访问内容链接
- Android Webview 调试已启用
- 接受所有证书的 Android
WebView
- Android 可调试属性已启用
- Android 碎片注入
- PreferenceActivity 中的 Android 碎片注入
- Android 缺少证书固定
- Android 敏感键盘缓存
- AnnotationPresent 检查
- 允许应用程序备份
- 存档解压缩期间的任意文件访问(“Zip Slip”)
- 数组索引越界
- 事件适配器的错误实现
- 错误的套件方法
- 装箱变量从不为 null
- 使用字符串连接构建命令行
- 使用注入的环境变量构建命令
- 对 Iterator.remove 的调用可能会失败
- 从抽象集合到具体集合的转换
- “instanceof” 测试链
- 传递给 StringBuffer 或 StringBuilder 构造函数的字符
- 类与超类具有相同的名称
- 在 cookie 中以明文形式存储敏感信息
- 在 Android 文件系统中以明文形式存储敏感信息
- 使用“Properties”类以明文形式存储敏感信息
- 使用 Android 上的
SharedPreferences
以明文形式存储敏感信息 - 使用 Android 上的本地数据库以明文形式存储敏感信息
- 比较相同的值
- 在循环条件中比较窄类型与宽类型
- 由于大小写导致的混淆方法名
- 混淆不覆盖包私有方法
- 混淆方法重载
- 常量接口反模式
- 常量循环条件
- 从未访问容器内容
- 从未初始化容器内容
- 将容器大小与零进行比较
- 不继续的 continue 语句
- 矛盾的类型检查
- 创建空 ZIP 文件条目
- 跨站点脚本
- 危险的非短路逻辑
- 危险的 runFinalizersOnExit
- 依赖 JCenter/Bintray 作为工件存储库
- 已弃用方法或构造函数调用
- 解除引用的表达式可能为 null
- 解除引用的变量始终为 null
- 解除引用的变量可能为 null
- 反序列化用户控制的数据
- 检测 JHipster Generator 漏洞 CVE-2019-16303
- 直接调用 run() 方法
- 禁用 Netty HTTP 标头验证
- 禁用 Spring CSRF 保护
- 双重检查锁定不线程安全
- Equals 方法不检查参数类型
- 对不可比较类型使用 Equals
- 对数组使用 Equals 或 hashCode
- 使用相对路径执行命令
- 公开内部表示
- 将敏感信息暴露给 UI 文本视图
- 将敏感信息暴露给通知
- 表达式始终计算为相同的值
- 表达式语言注入 (JEXL)
- 表达式语言注入 (MVEL)
- 表达式语言注入 (Spring)
- 可外部化但没有公共无参数构造函数
- 在 Maven 工件上传/下载中未能使用 HTTPS 或 SFTP URL
- 未能使用安全 cookie
- 字段屏蔽超类中的字段
- 终结器不一致
- 对字段的徒劳同步
- Groovy 语言注入
- HTTP 响应拆分
- API 调用中的硬编码凭据
- 没有 hashCode 定义的哈希值
- 忽略调用的错误状态
- 从数组到字符串的隐式转换
- 在复合赋值中隐式缩窄转换
- 隐式导出的 Android 组件
- 对用户提供的数组索引进行不当验证
- 对用于数组构造的用户提供的尺寸进行不当验证
- 广播接收器对意图进行不当验证
- compareTo 不一致
- equals 和 hashCode 不一致
- writeObject() 的不一致同步
- getter 和 setter 的不一致同步
- 随机数的错误绝对值
- serialVersionUID 字段不正确
- 低效的 String 构造函数
- 低效的空字符串测试
- 低效的输出流
- 低效的原始构造函数
- 低效的正则表达式
- 低效地使用键集迭代器
- 通过堆栈跟踪泄露信息
- 内部类可以是静态的
- 不安全的 Bean Validation
- 不安全的 JavaMail SSL 配置
- 不安全的 LDAP 身份验证
- 不安全的基本身份验证
- 不安全的本地身份验证
- 不安全的随机性
- 为本地身份验证不安全地生成密钥
- 将敏感信息插入日志文件
- 意图 URI 权限操作
- 接口无法实现
- 包装迭代器的 Iterable
- 实现 Iterable 的迭代器
- 使用用户控制的名称进行 JNDI 查找
- Javadoc 具有不可能的“throws”标记
- 从用户控制的源构建的 LDAP 查询
- 通过 ResultReceiver 泄露敏感信息
- 通过隐式意图泄露敏感信息
- 左移超过类型宽度
- 临时目录中的本地信息泄露
- 日志注入
- 循环具有不可达的退出条件
- 误导性缩进
- 缺少 JWT 签名检查
- 缺少 Override 注解
- 缺少对 NumberFormatException 的捕获
- 缺少 switch 中的枚举情况
- 缺少格式参数
- 内容提供程序中缺少读或写权限
- 字符串文字中缺少空格
- 缺少 super clone
- 余数的乘法
- hasNext 实现中的 Next
- 没有 clone 方法
- 在构造函数中调用非 final 方法
- 非同步方法覆盖同步方法
- 具有用户控制输入的 OGNL 表达式语言语句
- 重载 compareTo
- 重载 equals
- 过于宽松的正则表达式范围
- 部分路径遍历漏洞
- 来自远程的局部路径遍历漏洞
- 对不受控制的数据使用多项式正则表达式
- 可能混淆局部变量和字段
- 潜在的数据库资源泄漏
- 潜在的输入资源泄漏
- 潜在的输出资源泄漏
- 使用可能不可信的字符串连接构建查询
- 从用户控制的源构建查询
- 双重检查锁定对象初始化中的竞争条件
- 套接字身份验证中的竞争条件
- 随机数仅使用一次
- ReadResolve 必须具有 Object 返回类型,而不是 void
- 从世界可写文件读取
- 装箱类型的引用相等性测试
- 字符串的引用相等性测试
- 正则表达式注入
- 在用户控制的数据中解析 XML 外部实体
- 乘法的结果转换为更宽的类型
- 自我分配
- 可序列化但没有 void 构造函数
- 非可序列化类的可序列化内部类
- 序列化方法与所需签名不匹配
- 服务器端请求伪造
- 服务器端模板注入
- 持有锁时休眠
- 在字段上自旋
- 虚假的 Javadoc @param 标记
- 在构造函数中启动线程
- 继承方法的细微调用
- 可疑的日期格式
- 对装箱类型或字符串进行同步
- DateFormat 的线程不安全使用
- 检查时-使用时竞争条件
- 信任边界违规
- 类型绑定扩展最终类
- 容器访问的类型不匹配
- 容器修改的类型不匹配
- 类型变量隐藏另一个类型
- equals 中的拼写错误
- hashCode 中的拼写错误
- toString 中的拼写错误
- 来自远程源的 URL 转发
- 来自远程源的 URL 重定向
- 不受控制的命令行
- 算术表达式中的不受控制的数据
- 用于内容解析的不受控制的数据
- 用于路径表达式的不受控制的数据
- 下划线用作标识符
- 不可达的捕获子句
- 未读的局部变量
- 未释放的锁
- 不安全的证书信任
- 不安全的主机名验证
- Android WebView 中不安全的资源获取
- getResource 的不安全使用
- 未使用的类和接口
- 未使用的格式参数
- 未使用的标签
- 使用 RSA 算法而不使用 OAEP
- 使用损坏或有风险的加密算法
- 使用密钥长度不足的加密算法
- 使用潜在的损坏或有风险的加密算法
- 使用潜在的危险函数
- 在安全随机数生成器中使用可预测的种子
- 使用默认的 toString()
- 使用外部控制的格式字符串
- 使用隐式 PendingIntents
- 无用的比较测试
- 无用的 null 检查
- 无用的参数
- 对 String 使用无用的 toString
- 无用的类型测试
- 用户控制的敏感方法旁路
- 算术表达式中的用户控制数据
- 数值转换中的用户控制数据
- 用于权限检查的用户控制数据
- 使用静态初始化向量进行加密
- 在条件上等待
- 空白与运算符优先级矛盾
- 错误的 NaN 比较
- XPath 注入
- 使用用户控制的样式表进行 XSLT 转换
TrustManager
接受所有证书- 使用 notify 而不是 notifyAll