ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

Snyk CLI `snyk ignore` 命令完全指南:通过 `.snyk` 策略文件忽略漏洞与排除扫描路径

Snyk CLI `snyk ignore` 命令完全指南:通过 `.snyk` 策略文件忽略漏洞与排除扫描路径 应用安全漏洞扫描供应链安全CLI开发工具DevSecOps【免费下载链接】cliSnyk CLI scans and monitors your projects for security vulnerabilities.项目地址https://gitcode.com/gh_mirrors/cli6/cli点击查看免费下载snyk ignore是 Snyk CLI 中用于管理本地.snyk策略文件的命令它既能按 Snyk ID 忽略指定漏洞Open Source 与 IaC也能通过--file-path将目录或文件从 Snyk CodeSAST与snyk test --unmanaged扫描中排除。阅读本文后你将掌握该命令的两种工作模式、全部可选参数及其默认值、.snyk文件中 ignore/exclude 块的生成规则并理解命令在 CLI 源码中的底层实现与测试验证方式可直接在真实项目与 CI 流水线中落地使用。命令概览两种模式一份策略文件help/cli-commands/ignore.md将该命令划分为两种使用形态Ignore 模式按问题 ID 忽略snyk ignore --idISSUE_ID [--expiry] [--reason] [--policy-pathPATH_TO_POLICY_FILE] [--pathPATH_TO_RESOURCE] [OPTIONS]Exclude 模式按文件路径排除snyk ignore [--expiry] [--reason] [--policy-pathPATH_TO_POLICY_FILE] [--file-pathPATH_TO_RESOURCE] [OPTIONS]两种模式最终都落盘到.snyk策略文件前者在ignore块中按 Snyk ID 登记忽略规则可限定依赖图资源路径、设置过期时间与理由后者在exclude块中登记文件/目录匹配模式使其不再进入扫描。注意与 Snyk Code 的关系通过.snyk文件忽略问题的方式不支持 Snyk Code。若要从命令行忽略 Snyk Code 的 finding应改用 Consistent Ignores for Snyk Code 的snyk ignore create子命令通过--finding-id定位 finding支持not-vulnerable | wont-fix | temporary-ignore三种忽略类型并可设置--expiration过期时间。而--file-path排除扫描路径则仅对 Snyk CodeSAST测试与 Open Source 的--unmanaged测试生效对其他测试类型无效。.snyk文件中生成的规则结构忽略规则ignore 块对某个ISSUE_ID执行忽略后本地.snyk文件会生成如下结构ignore: ISSUE_ID: - *: reason: REASON expires: EXPIRY当配合--path指定资源路径时通配符*会被替换为具体路径ignore: ISSUE_ID: - PATH_TO_RESOURCE: reason: REASON expires: EXPIRY从源码 src/cli/commands/ignore.ts 可以看到ignoreIssue函数实际写入的每条规则还包含第三个字段created: new Date()即ignore: ISSUE_ID: - *: reason: REASON expires: EXPIRY created: CREATION TIME同一次执行时函数会先检查该 ID 下是否已存在同路径规则issueIgnorePaths.findIndex不存在则新增一条规则已存在则仅更新该路径的reason与expires元数据从而避免重复堆积。这也是同一路径多次执行snyk ignore只会产生一条规则的底层原因。排除规则exclude 块当使用--file-path时.snyk文件生成的是exclude块exclude: GROUP: - FILE MATCHING-PATTERN - FILE MATCHING-PATTERN: expires: EXPIRY created: CREATION TIME其中GROUP由--file-path-group指定默认global。源码 excludeFilePathPattern 先构建excludeOptions仅当--reason/--expiry显式给出时才写入reason与expires字段然后调用pol.addExclude(pattern, group, excludeOptions)并policy.save落盘。全部选项详解--idISSUE_ID要忽略的问题的 Snyk ID。当命令与--file-path一起使用时省略否则为必填项。源码 ignoreIssue 中未提供id会直接抛出idRequired错误对应验收测试中snyk ignore --reasonREASON返回退出码 2 并提示 id is a required field见 test/jest/acceptance/snyk-ignore/snyk-ignore.spec.ts。--expiryEXPIRY过期日期格式为YYYY-MM-DD。支持 ISO 8601 与 RFC 2822 两种格式。默认值为 30 天与--file-path一起使用时默认值则变为「无」。该字段并非必填省略时使用默认值若需要永久忽略可将过期时间设为远期日期例如9999-01-01。需要注意若要确保过期日期真正生效日期必须符合 JavaScript Date Time String 格式如YYYY-MM-DDThh:mm:ss.fffZ若指定日期不符合该格式忽略规则将无限期生效。源码中对应实现为options.expiry new Date(options.expiry)并通过对getTime()与自身比较NaN的方式判定日期无效——无效时自动回退为「当前时间 30 天」options.expiry new Date(options.expiry); if (options.expiry.getTime() ! options.expiry.getTime()) { debug(No/invalid expiry given, using the default 30 days); options.expiry new Date(Date.now() 30 * 24 * 60 * 60 * 1000); }src/cli/commands/ignore.ts--reasonREASON可读的忽略理由说明。默认值无。注意Snyk Code 不支持--reason。源码中未提供reason时写入的默认值为字符串None Givensrc/cli/commands/ignore.ts这一点在验收测试「creates a policy file using minimal options」中得到印证test/jest/acceptance/snyk-ignore/snyk-ignore.spec.ts。--policy-pathPATH_TO_POLICY_FILE手动指定.snyk策略文件路径。默认值无。命令内部通过policy.load(path)加载策略若文件不存在ENOENT则调用policy.create()新建一个策略对象再在内存中修改后由policy.save写回src/cli/commands/ignore.ts。--pathPATH_TO_RESOURCE依赖图中要忽略问题的资源路径用于缩小忽略规则的作用范围。未指定资源路径时默认忽略所有资源对应.snyk文件中的*通配符源码在!options.path时置为*。对于使用 semver 版本约定的生态路径中可以按 semver 语法指定组件版本。该选项若使用需放在--policy-path选项之后。默认值all。--file-pathPATH_TO_RESOURCE要从扫描中排除的目录或文件路径文件系统路径。仅用于snyk code与snyk test --unmanaged其他测试类型不生效。默认值无。--file-path-group[global|code|iac-drift]与--file-path配合使用的分组否则省略。默认值global。源码中该参数的处理为options[file-path-group] || globalsrc/cli/commands/ignore.ts。同一模式可以按不同分组分别登记验收测试「update a policy file with exclude, using different groups」验证了同一模式**/deps/**/*.ts同时存在于global与code两组、互不覆盖的行为test/jest/acceptance/snyk-ignore/snyk-ignore.spec.ts。实战命令示例指定过期时间与理由忽略特定漏洞$ snyk ignore --idnpm:qs:20170213 --expiry2021-01-10 --reasonModule not affected by this vulnerability指定过期时间、资源路径与理由忽略特定漏洞$ snyk ignore --idSNYK-JS-PATHPARSE-1077067 --expiry2021-01-10 --pathnyc11.9.0 istanbul-lib-report1.1.3 path-parse1.0.5 --reasonModule not affected by this vulnerability依赖路径以连接可精确到传递依赖链上的具体组件。指定过期时间与资源路径忽略特定漏洞$ snyk ignore --idSNYK-JS-PATHPARSE-1077067 --expiry2021-01-10 --pathnyc11.9.0使用资源路径忽略WindowsWindows上snyk iac test返回的 Path 含单引号、File 含反斜杠例如Rule: https://security.snyk.io/rules/cloud/SNYK-CC-TF-118 Path: resource aws_iam_role[OrganizationAccountAccessRole] assume_role_policy[Statement][0] File: terraform\environment\com\iam.tf对应的snyk ignore命令用双引号包裹含反斜杠与方括号的完整路径$ snyk ignore --idSNYK-CC-TF-118 --pathterraform\environment\com\iam.tf resource aws_iam_role[OrganizationAccountAccessRole] assume_role_policy[Statement][0]使用资源路径忽略Linux / macOSLinux 或 macOS 上返回的 Path 同样含单引号但 File 使用正斜杠$ snyk ignore --idSNYK-CC-TF-118 --pathterraform/environment/com/iam.tf resource aws_iam_role[OrganizationAccountAccessRole] assume_role_policy[Statement][0]两条命令的要点一致--path中需要包含文件名前缀与 IaC 报告给出的完整资源路径链且必须整体加引号避免 shell 对空格、方括号与引号做错误解析。忽略漏洞 30 天使用默认过期时间$ snyk ignore --idnpm:tough-cookie:20160722省略--expiry命令自动使用 30 天默认过期时间。忽略特定文件直到 2031-01-20$ snyk ignore --file-pathdeps/curl-7.58.0/src/tool_msgs.c --expiry2031-01-20 --reasonpatched file生成的排除规则会被snyk test --unmanaged在 2031-01-20 之前持续使用reason作为未来复查时的参考描述。使用 glob 表达式忽略文件或文件夹仅 Snyk Code 与 unmanaged$ snyk ignore --file-path**/vendor/**/*.cpp --file-path-groupglobal匹配该 glob 的文件会被加入指定分组并排除出扫描。此能力适用于 Snyk Code不适用于除unmanaged之外的 Snyk Open Source、Container 或 IaC。命令的底层执行流程与权限校验从源码可以梳理出snyk ignore的完整执行链路src/cli/commands/ignore.tsAPI Token 检查调用apiTokenExists()在 CI 环境下失败时抛MisconfiguredAuthInCI错误权限校验通过 src/lib/authorization.ts 的actionAllowed(cliIgnore, options)向{API}/authorization/cliIgnore发起 GET 请求携带 org 参数服务端返回{ allowed, reason }若allowed为 false命令打印红色reason后直接返回——验收测试「errors when user is not authorized to ignore」正是通过server.unauthorizeAction(cliIgnore, not allowed)模拟该场景模式分发根据是否提供--file-path分流——提供则走excludeFilePathPatternExclude 模式否则走ignoreIssueIgnore 模式落盘两种模式最终都经由policy.load不存在则policy.create→ 内存修改 →policy.save写回.snyk。由此可见snyk ignore是一个完全本地化的策略文件编辑命令它并不直接向 Snyk 平台提交忽略操作而是修改随项目分发、随snyk test/snyk monitor一并上传的.snyk策略文件由后续扫描结果结合策略内容过滤对应问题。调试与验证使用-d选项输出调试日志。源码在各关键步骤埋有debug(snyk ignore called with options: %O, options)、debug(No/invalid expiry given, using the default 30 days)、debug(changing policy: ignore %s, for %s, reason: %s, until: %o)等日志点可通过DEBUGsnyk环境变量放大观察。命令执行成功后可直接阅读生成的.snyk文件确认ignore/exclude块内容是否符合预期。仓库内 test/jest/acceptance/snyk-ignore/snyk-ignore.spec.ts 覆盖了最小选项创建、完整选项创建、多路径规则新增、同路径规则更新、多分组 exclude 等核心场景可作为行为规范的参考IaC 侧的策略匹配行为可参考 test/jest/unit/iac/process-results/fixtures 下的各类policy-ignore-*.yml与policy-ignore-invalid-expiry.yml测试数据。适用边界小结.snyk文件忽略适用于 Snyk Open Source 与 Snyk IaC不适用于 Snyk CodeSnyk Code 请改用snyk ignore create。--file-path排除仅适用于snyk code与snyk test --unmanaged。权限命令需要有效 API Token且在 CI 环境中未配置 Token 会得到明确的MisconfiguredAuthInCI报错组织级还可以通过服务端cliIgnore授权策略决定是否允许执行忽略操作。赞分享应用安全漏洞扫描供应链安全CLI开发工具DevSecOps【免费下载链接】cliSnyk CLI scans and monitors your projects for security vulnerabilities.项目地址https://gitcode.com/gh_mirrors/cli6/cli点击查看免费下载相关推荐Snyk CLI 的 snyk cos 命令集用 Snyk AI Pentesting 扫描已部署应用的安全漏洞Snyk CLI 的 snyk cos 命令集用 Snyk AI Pentesting 扫描已部署应用的安全漏洞 snyk cos 是 Snyk CLI 中面应用安全漏洞扫描供应链安全CLI开发工具DevSecOpsSnyk CLI snyk code test 命令完全指南使用静态代码分析扫描安全漏洞Snyk CLI snyk code test 命令完全指南使用静态代码分析扫描安全漏洞 导读 本文围绕 Snyk CLI 中的 snyk code test应用安全漏洞扫描供应链安全CLI开发工具DevSecOpsSnyk CLI snyk ignore create 完整指南基于 Consistent Ignores 为 Snyk Code 问题创建统一忽略规则Snyk CLI snyk ignore create 完整指南基于 Consistent Ignores 为 Snyk Code 问题创建统一忽略规则 导读应用安全漏洞扫描供应链安全CLI开发工具DevSecOps上一篇终极RIBs工作流编排指南Workflow组件的Step设计模式深度解析下一篇Vanitygen实战案例5分钟生成含自定义前缀的比特币地址创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进