CheckMarx中文网站 > 使用教程 > Checkmarx规则怎么自定义 Checkmarx自定义规则开发怎么入门
教程中心分类
Checkmarx规则怎么自定义 Checkmarx自定义规则开发怎么入门
发布时间:2026/03/17 09:52:36

  很多团队用Checkmarx扫描一段时间后会遇到同一个瓶颈:内置规则能抓到共性问题,但对你们的框架约定、输入校验封装、网关鉴权逻辑不够贴合,误报偏多,遗漏也难解释。解决方法不是把规则全关掉,而是用自定义规则把你们的真实代码语义“教给”扫描器,并把自定义内容纳入Preset与项目配置,形成可复用、可回滚的治理闭环。

  一、Checkmarx规则怎么自定义

 

  自定义规则在Checkmarx体系里通常对应自定义查询,也就是用CxQL改写或覆盖内置Query,再通过Preset或项目级配置让扫描按你的口径执行。建议优先走基于内置Query的覆盖式改写,先把误报压下去,再逐步做增强型Query。

 

  1、先选定你要改的是CxSAST还是Checkmarx One

 

  如果你用的是Checkmarx One,入口通常在【Query Editor】里做Override Query,并支持把覆盖范围落到租户、应用或项目级别;如果你用的是CxSAST,常用入口是【Settings】下的【Query Viewer】查看并导入导出自定义查询。

 

  2、用内置Query做一份Override Query当作起点

 

  在Checkmarx One进入【Query Editor】,先选择语言,再在查询树里找到最接近你需求的内置Query,复制其源码创建Override Query,然后只改最小必要条件,例如把你们的统一校验函数当作净化点,或把内部可信入口加入白名单,避免一上来重写整条查询导致漏报。

 

  3、用小范围扫描快速验证改动是否生效

 

  不要直接让全量项目吃新规则,先挑一个小项目或小模块跑一次验证扫描,重点看两类指标,误报是否显著下降,漏报是否新增;若你在CxAudit环境复现问题,也可以用Mini Project Creator把单条结果抽取成最小复现工程再迭代Query,效率更高。

 

  4、把自定义查询导出成文件做版本化管理

 

  在CxSAST里可以在【Settings】→【Scan Settings】→【Query Viewer】中把自定义查询以XML导出,作为版本库资产归档;需要迁移或回滚时再通过同入口导入。

 

  5、用Preset把规则集合固化并分发到项目

 

  规则不是只要做出来就完了,你需要把要启用的Query组合成Preset,再把Preset绑定到项目扫描配置,这样同一套口径能稳定复用;Preset同样支持导出与导入,建议把Preset XML与Query XML一起归档,避免只存规则不存启用集合。

 

  6、上线前补一条变更说明避免治理口径漂移

 

  每次自定义规则调整,都写清改动原因、影响范围、预期变化点与回滚文件名,例如误报减少哪些类型、哪些模块会新增命中,方便后续对扫描趋势波动做解释。

 

  二、Checkmarx自定义规则开发怎么入门

 

  自定义规则开发的本质是学会用CxQL在代码图上描述你关心的模式,典型是source到sink未净化的数据流问题,也可以是硬编码、危险API使用、错误配置等结构性问题。入门建议从读懂Query结构开始,再用官方示例改一条最小Query,最后把测试与发布流程固化。

 

  1、先用Query结构模板理解一条规则在做什么

 

  多数安全Query都能拆成三块,定义source集合,定义sink集合,定义净化或过滤条件,然后在图上找出可疑路径;你先把现有Query读通,再决定要改source、改sink还是补净化点,能避免盲改造成大面积漏报。

  2、从官方示例Query复制改写而不是从空白写

 

  用官方给出的Query Coding Example找一个接近你目标的基础Query,例如字符串或硬编码类检查,复制后只替换关键节点匹配条件,例如把你们的内部生成目录排除或把某类文件纳入,先跑通一条再扩展到复杂数据流。

 

  3、用最小复现工程做单元化调试

 

  当你遇到某条结果想复现或修Query,优先用Mini Project Creator抽取最小工程,然后只对这个工程跑扫描与调试,能把迭代周期从小时级压到分钟级,改动也更可控。

 

  4、掌握Query Editor与API两套调试抓手

 

  日常迭代优先用Query Editor在UI里改与跑,做自动化时再考虑Query相关API,用于批量拉取语言Query、执行查询、做质量守门与报表生成,把规则开发纳入流水线。

 

  5、把规则开发产物拆成三件套归档

 

  建议每条自定义规则至少归档三类资产,Query源码与XML导出文件、覆盖范围与Preset配置、测试用最小复现工程与期望结果清单,这样换人维护也能快速接续。

 

  三、Checkmarx自定义规则治理与发布节奏

 

  自定义规则真正上线后,治理重点会从写规则变成控影响面、控误报率、控回滚成本。把发布节奏固定下来,才能让规则迭代不会反复扰动研发效率。

 

  1、用试运行Preset做灰度验证

 

  先复制正式Preset做一份试运行Preset,只在少量项目启用并跑一到两轮迭代,观察误报率与新增命中对研发的影响,再决定是否合入正式Preset。

 

  2、把误报处置与规则改进分开处理

 

  误报短期可以先走问题处置流程并记录原因,但中期必须回到Query里补净化点或补过滤条件,否则误报会持续消耗团队;同时为每次规则调整保留前后对比报表,便于解释趋势变化。

 

  3、上线前后都做导出备份确保可回滚

 

  上线前导出当前Query XML与Preset XML,放入版本库并标记版本号;上线后若噪声超出预期,可以直接导入上一个版本回滚,再用小步迭代修正。

 

  4、定期清理与合并重复规则

 

  随着团队积累,自定义规则可能出现重复覆盖或不同版本同名规则并存,建议每个季度做一次梳理,把重复规则合并到主版本,并明确弃用规则的替代项与停用时间,避免扫描口径越来越碎。

 

  5、把规则变更写进审计材料

 

  对外审计或客户追溯时,最常被问的是你们为何启用或调整某条规则、依据是什么、影响范围是什么,因此每次规则变更至少保留变更单、导出文件、验证项目结果三项证据,形成可复核链路。

  总结

 

  Checkmarx规则自定义建议先从内置Query出发做Override Query,先解决你们框架与校验封装带来的误报,再通过导出XML与Preset把规则集合固化到项目。自定义规则开发入门要先读懂CxQL的Query结构,用官方示例改写最小Query并在最小复现工程上迭代验证,成熟后再用API把规则管理纳入流水线。最后用试运行Preset灰度、导出备份回滚、定期梳理合并与变更留痕,把自定义规则从一次性调参变成长期可治理的工程能力。

135 2431 0251