CodeQL查询元数据与告警信息编写规范指南

CodeQL查询元数据与告警信息编写规范指南

codeql CodeQL: the libraries and queries that power security researchers around the world, as well as code scanning in GitHub Advanced Security codeql 项目地址: https://gitcode.com/gh_mirrors/co/codeql

引言

在静态代码分析工具CodeQL中,查询文件(.ql)是核心组成部分。本文将深入解析如何规范编写CodeQL查询文件的元数据和告警信息,帮助开发者编写高质量、标准化的查询文件。

查询文件结构解析

每个CodeQL查询文件包含两个主要部分:

  1. 元数据区域:位于文件顶部,采用QLDoc注释格式(以/**开头,*/结尾),包含查询的关键描述信息
  2. 查询定义区域:使用QL语言编写的实际查询逻辑,包含select语句定义结果内容和格式

元数据编写规范

基础元数据字段

  1. @name(必填)

    • 查询的显示名称
    • 采用句子首字母大写格式,不加句号
    • 示例:@name Access to variable in enclosing class
  2. @description(必填)

    • 查询的简短描述
    • 采用完整句子格式,包含句号
    • 代码元素使用单引号包裹
    • 示例:@description Using a format string with an incorrect format causes a 'System.FormatException'.
  3. @id(必填)

    • 查询的唯一标识符
    • 格式:语言代码/描述短语
    • 支持的语言代码:cpp(c/c++)、cs(c#)、go、java、js(javascript)、py(python)等
    • 示例:@id cs/command-line-injection
  4. @kind(必填)

    • 查询类型:
      • problem:普通告警查询
      • path-problem:包含路径信息的告警查询
      • metric:度量查询

高级元数据字段

  1. @problem.severity

    • 告警严重程度:
      • error:可能导致程序错误行为
      • warning:潜在问题或代码脆弱性
      • recommendation:代码改进建议
  2. @precision

    • 查询结果精确度:
      • lowmediumhighvery-high
  3. @security-severity

    • 安全问题的严重程度评分(0.0-10.0)

标签系统(@tags)

CodeQL使用标签系统对查询进行分类:

安全类查询(@tags security)
  • 关联CWE弱点分类:external/cwe/cwe-XXX
  • 示例:@tags securityexternal/cwe/cwe-022
质量类查询(@tags quality)
  • 可维护性相关:

    • maintainability:代码可维护性
    • readability:代码可读性
    • useless-code:无用代码
    • complexity:代码复杂度
  • 可靠性相关:

    • reliability:代码可靠性
    • correctness:正确性问题
    • performance:性能问题
    • concurrency:并发问题
    • error-handling:错误处理

告警信息编写规范

在查询的select语句中定义的告警信息应遵循以下准则:

  1. 格式规范

    • 使用完整句子,包含句号
    • 代码元素用单引号包裹
    • 避免使用"here",改用"this location"
  2. 内容规范

    • 客观描述问题,不包含修复建议
    • 尽可能包含上下文信息
    • 示例:The class 'Foo' is duplicated as 'Bar'.
  3. 链接使用规范

    • 使用$@进行变量替换
    • 链接文本应简洁准确
    • 避免使用"click here"等模糊描述

度量查询规范

度量查询(@kind metric)的select语句结果模式:

  1. 仅包含数字:表示无特定位置的度量(如代码总行数)
  2. 代码实体+数字:表示有特定位置的度量(如文件行数)

最佳实践建议

  1. 对于跨语言相同问题的查询,保持@id一致性
  2. 查询变更时使用@previous-id记录历史
  3. 标签数量不超过10个
  4. 安全相关查询必须包含@security-severity
  5. 质量相关查询使用@problem.severity

通过遵循这些规范,可以确保CodeQL查询的一致性和可维护性,提高静态分析结果的质量和可用性。

codeql CodeQL: the libraries and queries that power security researchers around the world, as well as code scanning in GitHub Advanced Security codeql 项目地址: https://gitcode.com/gh_mirrors/co/codeql

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

薛珑佳

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值