GitHub CodeQL获得声明式清洁器和验证器,无需编写QL代码
为什么重要
GitHub在CodeQL 2.25.2中通过YAML实现了清洁器和验证器的声明式定义,无需编写QL代码。支持8种语言(C/C++、C#、Go、Java/Kotlin、JS/TS、Python、Ruby、Rust),让没有QL专家的团队也能进行静态安全分析。
GitHub CodeQL获得声明式清洁器和验证器,无需编写QL代码
GitHub在CodeQL 2.25.2版本中扩展了models-as-data方法,新增功能允许通过YAML定义清洁器和验证器,无需在QL语言中编写查询。
什么是清洁器和验证器
清洁器是清除输入数据中潜在危险内容的函数,例如在显示前去除HTML标签。验证器是返回布尔结果并表示数据是否可以安全进一步处理的函数。在CodeQL的术语中,清洁器建模为屏障(受感染数据流的中断),验证器建模为屏障守卫(条件中断)。此前,团队必须编写自己的QL查询来让CodeQL识别其内部安全函数。新的可扩展谓词barrierModel和barrierGuardModel现在只需通过YAML模型包填充即可。
支持的语言和实际影响
该功能覆盖八种编程语言:C/C++、C#、Go、Java/Kotlin、JavaScript/TypeScript、Python、Ruby和Rust。对于每种语言,团队可以在不深入了解QL的情况下定义自己的输入、输出和条件。GitHub将这一转变描述为安全静态分析的民主化。拥有用于转义SQL查询、清洁HTML或验证JWT令牌的自有辅助函数的组织,现在可以通过其模型包存储库中的拉取请求将这些模式添加到标准CodeQL扫描器中。
谁应该尝试
预计这对在拥有内部安全库的大型单体存储库中工作的安全团队,以及希望覆盖其工具函数的开源维护者最有帮助。该功能可在2026年4月的CodeQL 2.25.2中使用。对于已经使用GitHub Advanced Security的小型团队,这是扩大覆盖范围而无需聘用QL专家的低风险方式。一个典型用例是拥有自己编写的用于在SQL查询前转义用户输入的函数的组织。没有这些扩展,CodeQL仍会报告SQL注入的误报警告,即使数据实际上是安全的。通过在模型包中添加YAML条目,这些误报得以消除,分析在拉取请求中保持一致。YAML扩展的文档和示例在官方CodeQL存储库中提供,GitHub宣布通过季度更新进一步扩展。
本文由人工智能基于一手来源生成。