填了排除目录,扫描结果中却仍出现相关文件,需要检查过滤阶段、扫描器和实际路径。围绕“Checkmarx如何设置扫描排除路径,Checkmarx排除目录内文件仍被扫描是什么原因”,下面以Checkmarx One英文界面及其CLI为例说明;旧版CxSAST的路径规则需要另行核对。
一、Checkmarx如何设置扫描排除路径
让SAST跳过目录,用扫描器过滤;需要文件不上传,则使用适用的打包过滤。
1、在项目中设置SAST目录过滤
先核对项目名称,修改后重新发起扫描。
①在【Applications and Projects】页面找到目标项目,点击操作图标→【Project Settings】。
②进入【Project Rules】,点击【+Add Rule】,选择【SAST】及【Folder/file filter】对应选项。
③输入排除模式,例如!/generated/,排除各层级generated目录及其内容,保存设置。
④需要排除多个目录时,用英文逗号连接模式;已有过滤规则时先保留副本,再修改同一参数。
2、根据目录层级选择模式
过滤器使用路径模式,需区分直属文件和子目录。
①排除源码根目录下的generated目录时,使用!generated/**。
②排除任意层级同名目录时,使用!/generated/。
③需要连同子目录一起排除时,不只写!**/generated/*;单星号模式可能留下更深层内容。
④检查排除项前的!。漏掉后可能变成包含条件,不能仅填写目录名称就认定已经排除。
3、流水线扫描时传入对应参数
CLI的--sast-filter只针对SAST。若要递归处理打包范围,应检查当前CLI是否支持--file-filter-ext。
①在现有扫描任务中设置--sast-filter'!/generated/',确认参数传给实际执行的cx scan create。
②本地目录或ZIP扫描需要在上传前排除时,使用--file-filter-ext'!/generated/'。
③不用普通--file-filter承担复杂子路径匹配;它的路径能力有限,不能与扩展参数混为一谈。
④检查流水线最终传入的参数,按使用的Shell处理引号,避免!、*被提前解释或删除。
4、核对源码来源是否支持该方式
仓库地址与本地目录支持的过滤方式不同。
①查看--file-source指向本地目录、ZIP文件还是Git仓库地址。
②直接扫描Git仓库时,使用扫描器专用过滤;--file-filter和--file-filter-ext不适用于这一来源。
③需要扫描前移除文件时,先检出代码,再以本地目录为扫描来源,并核对检出分支和提交。
二、Checkmarx排除目录内文件仍被扫描是什么原因
先选一份仍出现的文件,记录完整路径、扫描编号和扫描器类型,再沿配置链检查。
1、匹配的根目录与预想不同
ZIP多了一层外部目录时,根目录模式可能失配。
①查看文件在本次扫描源码中的实际路径,对照上传目录或压缩包结构。
②核对generated/file.js与project/generated/file.js是否被当成同一根路径处理。
③根据实际层级修正模式;确实要排除所有同名目录时,再改用!/generated/。
④检查大小写、英文逗号及多余空格,不直接复制本地磁盘绝对路径作为跨环境过滤条件。
2、项目设置被扫描参数覆盖
网页与CLI都设置了过滤时,要检查【Allow Override】,不能只看网页里是否保存成功。
①返回【Project Settings】→【Project Rules】,检查该过滤项的【Allow Override】。
②允许覆盖时,对照流水线中的--sast-filter,确认是否用另一组值替换了项目配置。
③不允许覆盖时,不依赖CLI修改该扫描器过滤;需要调整的内容在有权限的配置层修改。
④检查流水线模板、插件附加参数和API请求,确保排除项传给了本次扫描。
3、排除了一个扫描器,另一个仍在处理
SAST、SCA和IaC Security需要分别核对过滤配置。
①查看异常记录来自哪个扫描器,核对是否误把SCA结果当成SAST文件分析结果。
②根据目标检查--sast-filter、--sca-filter或--iac-security-filter,不在一个参数中代替所有扫描器设置。
③使用本地SCA Resolver时,检查Resolver的--excludes配置;云端解析使用的--sca-filter不能直接代替它。
④区分“文件仍在上传包里”和“文件被该扫描器分析”。项目级过滤不负责从上传包删除源码。
4、查看的是旧扫描或其他副本
修改配置不会改写旧扫描结果。同一份代码还可能出现在复制目录、构建产物或另一个模块中。
①按扫描编号、启动时间、分支和提交标识打开新结果,不继续使用旧报告。
②比较告警文件的完整路径,检查是否属于未排除的另一份副本。
③配置调整后执行一次完整SAST扫描作为对照,避免只凭增量扫描中的历史表现判断。
④使用CxSAST 9.x时,核对对应版本文档;9.2—9.5与9.6及之后版本的过滤语法不同,不直接照搬Checkmarx One示例。
三、Checkmarx排除配置修改后怎么验证
用目录内外的样本检查过滤效果。
1、检查目录内外的样本文件
测试时保留一份应分析的文件,检查是否意外排除了整个范围。
①在目标目录直属位置、子目录内各选一份文件,再选一份目录外文件。
②使用相同提交、相同扫描器配置运行扫描,核对日志及可获取的文件分析信息。
③使用扫描器过滤时,确认目标文件被跳过;使用打包过滤时,检查准备的上传内容是否已经移除目标文件。
④确认目录外文件仍参与分析,保存排除模式、CLI版本和验证用的扫描编号。
总结
希望“Checkmarx如何设置扫描排除路径,Checkmarx排除目录内文件仍被扫描是什么原因”这篇文章能帮到大家。安全检查要融入开发流程,离不开工具与项目实际情况的配合。团队成员对检查范围有共同认识,沟通时才能少一些猜测,处理问题也更有依据。项目规模逐渐扩大后,这些日常维护工作会变得更重要。希望大家在使用中积累经验,让安全工作与开发协作衔接得更自然,为产品的持续交付提供支持。如果有Checkmarx相关需求,欢迎联系我们进一步了解。