Cycode Cli

Cycode Cli

🚀 Cycode CLI 甚户指南

Cycode 呜什行界面CLI是䞀欟可圚本地安装的应甚皋序甚于扫描代码仓库检测其䞭是吊存圚密钥信息、基础讟斜即代码IaC的错误配眮、蜯件成分分析SCA挏掞以及静态应甚安党测试SAST问题。本指南将垊领悚了解该工具的安装和䜿甚方法。

🚀 快速匀始

Cycode CLI 是䞀欟区倧的代码扫描工具胜检测代码䞭倚种安党问题。䜿甚前需确保满足盞关前眮条件再按照安装步骀完成安装之后就可以根据需求选择合适的扫描呜什进行代码扫描。

✹ 䞻芁特性

  • 倚类型扫描支持对代码仓库进行密钥信息、基础讟斜即代码IaC的错误配眮、蜯件成分分析SCA挏掞以及静态应甚安党测试SAST问题的扫描。
  • 倚种扫描方匏提䟛仓库扫描、路埄扫描、提亀历史扫描、预提亀扫描等倚种扫描方匏满足䞍同场景需求。
  • 自定义配眮可以通过配眮文件或呜什行参数自定义扫描规则劂応略特定的密钥倌、路埄、规则等。
  • 诊细报告扫描结果䌚生成诊细的报告包括问题的䞥重皋床、所圚文件、代码片段等信息方䟿定䜍和解决问题。

📊 安装指南

前眮条件

  • Cycode CLI 应甚皋序需芁 Python 3.9 或曎高版本。
  • 䜿甚 [cycode auth 呜什](#using-the-auth-command) 来通过 CLI 对 Cycode 进行身仜验证。
    • 或者悚可以通过遵埪 服务莊户什牌 和 䞪人访问什牌 页面䞭诊细的步骀来获取 Cycode 客户端 ID 和客户端密钥这些页面包含了获取这些倌的诊细信息。

安装 Cycode CLI

圚本地机噚䞊安装 Cycode CLI 应甚皋序可按以䞋步骀操䜜

  1. 打匀呜什行或终端应甚皋序。
  2. 执行以䞋呜什之䞀
    • 从 PyPI 安装
      pip3 install cycode
      
    • 从 Homebrew 安装
      brew install cycode
      
    • 从 GitHub Releases 䞋蜜适甚于悚的操䜜系统和架构的可执行文件然后运行以䞋呜什
      cd /path/to/downloaded/cycode-cli
      chmod +x cycode
      ./cycode
      
  3. 最后对 CLI 进行身仜验证。有䞉种方法可以讟眮 Cycode 客户端 ID 和客户端密钥
    • cycode auth掚荐
    • cycode configure
    • 将它们添加到 环境变量 äž­

䜿甚 auth 呜什

⚠ 重芁提瀺

这是圚本地机噚䞊讟眮䞎 Cycode CLI 进行身仜验证的 掚荐 方法。

  1. 圚终端/呜什行窗口䞭蟓入以䞋呜什 cycode auth
  2. 䌚匹出䞀䞪浏览噚窗口芁求悚登圕 Cycode。
  3. 圚该页面蟓入悚的登圕凭据并登圕。
  4. 最终悚将进入䞀䞪页面芁求悚选择芁授权 Cycode 䜿甚的䞚务组劂果适甚。

    ⚠ 重芁提瀺

    这将是䞎 Cycode CLI 进行身仜验证的默讀方法。

  5. 点击 允讞 按钮以授权 Cycode CLI 圚所选䞚务组䞊䜿甚。
  6. 完成后劂果选择成功悚将看到盞应的屏幕提瀺。
  7. 圚终端/呜什行屏幕䞊退出浏览噚窗口时将看到以䞋内容 Successfully logged into cycode

䜿甚 configure 呜什

⚠ 重芁提瀺

劂果悚已经通过 Linux 或 Windows 环境变量讟眮了 Cycode 客户端 ID 和客户端密钥这些凭据将䌘先于歀方法。

  1. 圚终端/呜什行窗口䞭蟓入以䞋呜什
    cycode configure
    
  2. 蟓入悚的 Cycode API URL 倌可以留空以䜿甚默讀倌。 Cycode API URL [https://api.cycode.com]: https://api.onpremise.com
  3. 蟓入悚的 Cycode APP URL 倌可以留空以䜿甚默讀倌。 Cycode APP URL [https://app.cycode.com]: https://app.onpremise.com
  4. 蟓入悚的 Cycode 客户端 ID 倌。 Cycode Client ID []: 7fe5346b-xxxx-xxxx-xxxx-55157625c72d
  5. 蟓入悚的 Cycode 客户端密钥倌。 Cycode Client Secret []: c1e24929-xxxx-xxxx-xxxx-8b08c1839a2e
  6. 劂果倌蟓入成功悚将看到以䞋消息 Successfully configured CLI credentials! 或/和 Successfully configured Cycode URLs!

劂果悚进入甚户文件倹䞋的 .cycode 文件倹䌚发现这些凭据已创建并攟眮圚该文件倹䞭的 credentials.yaml 文件䞭。URL 则攟眮圚该文件倹䞭的 config.yaml 文件䞭。

添加到环境变量

圚 Unix/Linux 䞊
export CYCODE_CLIENT_ID={your Cycode ID}

和

export CYCODE_CLIENT_SECRET={your Cycode Secret Key}
圚 Windows 侊
  1. 从控制面板䞭富航到系统菜单。
  2. 接䞋来点击“高级系统讟眮”。
  3. 圚打匀的“系统属性”窗口䞭点击“环境变量”按钮。
  4. 创建 CYCODE_CLIENT_ID 和 CYCODE_CLIENT_SECRET 变量并分别将其倌讟眮䞺悚的 ID 和密钥。
  5. 将 cycode.exe 添加到路埄䞭以完成安装。

安装预提亀钩子

Cycode 的预提亀钩子可以圚悚的本地仓库䞭讟眮以䟿 Cycode CLI 应甚皋序圚悚将代码提亀到代码库之前自劚识别代码䞭的任䜕问题。

⚠ 重芁提瀺

预提亀钩子䞍适甚于 IaC 扫描。

执行以䞋步骀安装预提亀钩子

  1. 安装预提亀框架必须安装 Python 3.9 或曎高版本
    pip3 install pre-commit
    
  2. 富航到悚芁配眮的本地 Git 仓库的顶级目圕。
  3. 圚仓库的顶级目圕䞭创建䞀䞪名䞺 .pre-commit-config.yaml包含匀倎的 .的新 YAML 文件内容劂䞋
    repos:
    - repo: https://github.com/cycodehq/cycode-cli
    rev: v3.2.0
    hooks:
    - id: cycode
    stages:
    - pre-commit
    
  4. 根据悚的具䜓需求修改创建的文件。䜿甚钩子 ID cycode 启甚密钥扫描。䜿甚钩子 ID cycode-sca 启甚 SCA 扫描。䜿甚钩子 ID cycode-sast 启甚 SAST 扫描。劂果悚想启甚所有扫描类型请䜿甚以䞋配眮
    repos:
    - repo: https://github.com/cycodehq/cycode-cli
    rev: v3.2.0
    hooks:
    - id: cycode
    stages:
    - pre-commit
    - id: cycode-sca
    stages:
    - pre-commit
    - id: cycode-sast
    stages:
    - pre-commit
    
  5. 安装 Cycode 的钩子
    pre-commit install
    
    钩子安装成功后将星瀺消息Pre-commit installed at .git/hooks/pre-commit。
  6. 保持预提亀钩子䞺最新状态
    pre-commit autoupdate
    
    它将自劚将 .pre-commit-config.yaml 侭的 rev 曎新到 Cycode CLI 的最新可甚版本。

⚠ 重芁提瀺

觊发操䜜发生圚 git commit 呜什䞊。 钩子仅对暂存提亀的文件觊发。

💻 䜿甚瀺䟋

基础甚法

以䞋是䞀些垞见呜什的基础甚法瀺䟋

身仜验证

cycode auth

配眮 CLI

cycode configure

扫描仓库

cycode scan repository ~/home/git/codebase

高级甚法

启劚 MCP 服务噚

cycode mcp -t streamable-http -H 0.0.0.0 -p 9000

扫描指定类型并星瀺诊细日志

cycode scan -t sca --severity-threshold HIGH --verbose repository ~/home/git/codebase

📚 诊细文档

Cycode CLI 呜什

选项 诊情
-v, --verbose 星瀺诊细日志。
--no-progress-meter 䞍星瀺进床条。
--no-update-notifier 䞍检查 CLI 曎新。
-o, --output [rich|text|json|table] 指定蟓出类型。默讀䞺 rich。
--client-id TEXT 䞺特定扫描执行指定 Cycode 客户端 ID。
--client-secret TEXT 䞺特定扫描执行指定 Cycode 客户端密钥。
--install-completion 䞺圓前 shell 安装自劚补党。
--show-completion [bash|zsh|fish|powershell|pwsh] 星瀺指定 shell 的自劚补党内容以䟿倍制或自定义安装。
-h, --help 星瀺给定呜什的选项。
呜什 诊情
auth 对悚的机噚进行身仜验证将 CLI 䞎悚的 Cycode 莊户关联。
configure 甚于配眮 CLI 客户端身仜验证的初始呜什。
ignore 応略特定的倌、路埄或规则 ID。
mcp 启劚暡型䞊䞋文协议MCP服务噚以实现 AI 侎 Cycode 扫描功胜的集成。
scan 扫描内容䞭的密钥、IaC、SCA、SAST 违规。悚需芁指定芁执行的扫描类型提亀历史、路埄、仓库等。
report 生成报告。悚需芁指定芁生成的报告类型劂 SBOM。
status 星瀺 CLI 状态并退出。

MCP 呜什 [实验性]

⚠ 重芁提瀺

MCP 呜什仅适甚于 Python 3.10 及以䞊版本。劂果悚䜿甚的是蟃早的 Python 版本歀呜什将䞍可甚。

暡型䞊䞋文协议MCP呜什允讞悚启劚䞀䞪 MCP 服务噚该服务噚将 Cycode 的扫描功胜暎露给 AI 系统和应甚皋序䜿 AI 暡型胜借通过标准化协议䞎 Cycode CLI 工具进行亀互。

💡 䜿甚建议

䞺获埗最䜳䜓验䜿甚 pip install cycode 或 brew install cycode 圚系统䞊党局安装 Cycode CLI然后䜿甚 cycode auth 进行䞀次身仜验证。党局安装和身仜验证后悚无需圚 MCP 配眮文件䞭配眮 CYCODE_CLIENT_ID 和 CYCODE_CLIENT_SECRET 环境变量。

启劚 MCP 服务噚

cycode mcp

默讀情况䞋歀呜什䜿甚 stdio 䌠蟓启劚服务噚适甚于本地集成和胜借生成子进皋的 AI 应甚皋序。

可甚选项

选项 诊情
-t, --transport MCP 服务噚的䌠蟓类型stdio、sse 或 streamable-http默讀stdio
-H, --host 绑定服务噚的䞻机地址仅甚于非 stdio 䌠蟓默讀127.0.0.1
-p, --port 绑定服务噚的端口号仅甚于非 stdio 䌠蟓默讀8000
--help 星瀺垮助消息和可甚选项

MCP 工具

MCP 服务噚提䟛以䞋工具䟛 AI 系统䜿甚

工具名称 诊情
cycode_secret_scan 扫描文件䞭的硬猖码密钥
cycode_sca_scan 扫描文件䞭的蜯件成分分析SCA挏掞和讞可证问题
cycode_iac_scan 扫描文件䞭的基础讟斜即代码IaC错误配眮
cycode_sast_scan 扫描文件䞭的静态应甚安党测试SAST代码莚量和安党猺陷
cycode_status 获取 Cycode CLI 版本、身仜验证状态和配眮信息

䜿甚瀺䟋

基本呜什瀺䟋
  • 䜿甚默讀讟眮stdio 䌠蟓启劚 MCP 服务噚
cycode mcp
  • 䜿甚星匏的 stdio 䌠蟓启劚 MCP 服务噚
cycode mcp -t stdio
  • 䜿甚服务噚发送事件SSE䌠蟓启劚 MCP 服务噚
cycode mcp -t sse -p 8080
  • 䜿甚可流匏 HTTP 䌠蟓圚自定义䞻机和端口䞊启劚 MCP 服务噚
cycode mcp -t streamable-http -H 0.0.0.0 -p 9000

了解曎倚关于 MCP 䌠蟓类型的信息请参阅 MCP 协议规范 - 䌠蟓。

配眮瀺䟋
䜿甚 MCP 侎 Cursor/VS Code/Claude Desktop 等mcp.json

⚠ 重芁提瀺

对于欧盟 Cycode 环境请确保圚环境变量䞭讟眮适圓的 CYCODE_API_URL 和 CYCODE_APP_URL 倌䟋劂https://api.eu.cycode.com 和 https://app.eu.cycode.com。

遵埪 歀指南 圚 VS Code/GitHub Copilot 䞭配眮 MCP 服务噚。请泚意圚 settings.json 䞭有䞀䞪包含嵌套 servers 子对象的 mcp 对象而䞍是独立的 mcpServers 对象。

  • 对于 stdio 䌠蟓盎接执行
{
"mcpServers": {
"cycode": {
"command": "cycode",
"args": ["mcp"],
"env": {
"CYCODE_CLIENT_ID": "your-cycode-id",
"CYCODE_CLIENT_SECRET": "your-cycode-secret-key",
"CYCODE_API_URL": "https://api.cycode.com",
"CYCODE_APP_URL": "https://app.cycode.com"
}
}
}
}
  • 对于 stdio 䌠蟓 并䜿甚 pipx 安装
{
"mcpServers": {
"cycode": {
"command": "pipx",
"args": ["run", "cycode", "mcp"],
"env": {
"CYCODE_CLIENT_ID": "your-cycode-id",
"CYCODE_CLIENT_SECRET": "your-cycode-secret-key",
"CYCODE_API_URL": "https://api.cycode.com",
"CYCODE_APP_URL": "https://app.cycode.com"
}
}
}
}
  • 对于 stdio 䌠蟓 并䜿甚 uvx 安装
{
"mcpServers": {
"cycode": {
"command": "uvx",
"args": ["cycode", "mcp"],
"env": {
"CYCODE_CLIENT_ID": "your-cycode-id",
"CYCODE_CLIENT_SECRET": "your-cycode-secret-key",
"CYCODE_API_URL": "https://api.cycode.com",
"CYCODE_APP_URL": "https://app.cycode.com"
}
}
}
}
  • 对于 SSE 䌠蟓服务噚发送事件
{
"mcpServers": {
"cycode": {
"url": "http://127.0.0.1:8000/sse"
}
}
}
  • 对于 SSE 䌠蟓 圚自定义端口䞊
{
"mcpServers": {
"cycode": {
"url": "http://127.0.0.1:8080/sse"
}
}
}
  • 对于 可流匏 HTTP 䌠蟓
{
"mcpServers": {
"cycode": {
"url": "http://127.0.0.1:8000/mcp"
}
}
}
圚后台运行 MCP 服务噚
  • 对于 SSE 䌠蟓先启劚服务噚然后配眮客户端
# 圚后台启劚 MCP 服务噚
cycode mcp -t sse -p 8000 &

# 圚 mcp.json 䞭配眮
{
"mcpServers": {
"cycode": {
"url": "http://127.0.0.1:8000/sse"
}
}
}
  • 对于 可流匏 HTTP 䌠蟓
# 圚后台启劚 MCP 服务噚
cycode mcp -t streamable-http -H 127.0.0.2 -p 9000 &

# 圚 mcp.json 䞭配眮
{
"mcpServers": {
"cycode": {
"url": "http://127.0.0.2:9000/mcp"
}
}
}

⚠ 重芁提瀺

MCP 服务噚需芁正确的 Cycode CLI 身仜验证才胜正垞工䜜。圚启劚 MCP 服务噚之前请确保悚已䜿甚 cycode auth 进行身仜验证或配眮了悚的凭据。

MCP 故障排陀

劂果悚圚䜿甚 MCP 服务噚时遇到问题可以启甚调试日志以获取曎诊细的信息。有䞀种方法可以启甚调试日志

  1. 䜿甚 -v 或 --verbose 标志
cycode -v mcp
  1. 䜿甚 CYCODE_CLI_VERBOSE 环境变量
CYCODE_CLI_VERBOSE=1 cycode mcp

调试日志将星瀺以䞋诊细信息

  • 服务噚启劚和配眮
  • 连接尝试和状态
  • 工具执行和结果
  • 发生的任䜕错误或譊告

这些信息圚以䞋情况䞋可胜䌚有所垮助

  • 诊断连接问题
  • 了解某些工具无法正垞工䜜的原因
  • 识别身仜验证问题
  • 调试特定䌠蟓问题

扫描呜什

运行扫描

Cycode CLI 应甚皋序提䟛了倚种扫描类型悚可以根据具䜓情况选择最合适的选项。以䞋是圓前可甚的选项和呜什

选项 诊情
-t, --scan-type [secret|iac|sca|sast] 指定芁执行的扫描类型secret/iac/sca/sast默讀䞺 secret。
--show-secret BOOLEAN 以明文圢匏星瀺密钥。有关曎倚诊细信息请参阅 星瀺/隐藏密钥 郚分。
--soft-fail BOOLEAN 扫描时䞍倱莥始终返回非错误状态码。有关曎倚诊细信息请参阅 蜯倱莥 郚分。
--severity-threshold [INFO|LOW|MEDIUM|HIGH|CRITICAL] 仅星瀺指定级别或曎高级别的违规。
--sca-scan 指定芁执行的 SCA 扫描类型package-vulnerabilities/license-compliance。默讀䞺䞀者郜执行。
--monitor 指定时扫描结果将记圕圚 Cycode 䞭。
--cycode-report 圚控制台蟓出䞭星瀺 Cycode 平台䞊扫描报告的铟接。
--no-restore 指定时Cycode 将䞍运行恢倍呜什。这将仅扫描盎接䟝赖项
--gradle-all-sub-projects 䞺所有子项目运行 Gradle 恢倍呜什。歀呜什应从盞应目圕运行。
--maven-settings-file 仅适甚于 Maven允讞圚扫描䟝赖项时䜿甚自定义的 settings.xml 文件。
--help 星瀺给定呜什的选项。
呜什 诊情
commit-history 扫描歀 Git 仓库䞭的所有提亀历史记圕
path 扫描呜什䞭指定路埄䞋的文件
pre-commit 䜿甚歀呜什扫描尚未提亀的内容
repository 扫描 Git 仓库包括其历史记圕
选项诊情
䞥重皋床阈倌选项

芁将扫描结果限制圚特定的䞥重皋床阈倌可以圚扫描呜什䞭添加 --severity-threshold 参数。 䟋劂以䞋呜什将扫描仓库䞭䞥重皋床䞺䞭等或曎高的策略违规 cycode scan --severity-threshold MEDIUM repository ~/home/git/codebase

监控选项

⚠ 重芁提瀺

歀选项仅适甚于 SCA 扫描。

芁将 SCA 类型扫描䞭发现的䞎 SCA 策略 盞关的扫描结果掚送到 Cycode可以圚扫描呜什䞭添加 --monitor 参数。 䟋劂以䞋呜什将扫描仓库䞭的 SCA 策略违规并将其掚送到 Cycode 平台 cycode scan -t sca --monitor repository ~/home/git/codebase

Cycode 报告选项

每次䜿甚 Cycode CLI 执行扫描时郜䌚自劚生成䞀仜报告并将结果发送到 Cycode。这些结果䞎 Cycode 平台内的盞关策略䟋劂仓库扫描的 SCA 策略盞关联。

芁圚扫描完成后圚 CLI 蟓出䞭打印歀 Cycode 报告的盎接 URL可以圚扫描呜什䞭添加 --cycode-report 参数。 cycode scan --cycode-report repository ~/home/git/codebase

所有来自 CLI 的扫描结果郜将星瀺圚 Cycode 的 CLI 日志郚分。劂果悚圚呜什䞭包含了 --cycode-report 标志扫描结果后将圚终端䞭星瀺特定报告的盎接铟接。

⚠ 重芁提瀺

悚必须圚 Cycode 䞭具有 owner 或 admin 角色才胜查看歀页面。

cli-report

报告页面将类䌌于以䞋内容

包挏掞选项

⚠ 重芁提瀺

歀选项仅适甚于 SCA 扫描。

芁扫描本地仓库䞭的特定包挏掞可以圚 -t sca 或 --scan-type sca 选项后添加 --sca-scan package-vulnerabilities 参数。 圚前面的瀺䟋䞭劂果悚只想对包挏掞执行 SCA 扫描可以执行以䞋呜什 cycode scan -t sca --sca-scan package-vulnerabilities repository ~/home/git/codebase

讞可证合规选项

⚠ 重芁提瀺

歀选项仅适甚于 SCA 扫描。

芁扫描本地仓库的特定分支可以圚 --sca-scan license-compliance 参数后指定芁扫描的分支名称。 圚前面的瀺䟋䞭劂果悚只想扫描名䞺 dev 的分支可以执行以䞋呜什 cycode scan -t sca --sca-scan license-compliance repository ~/home/git/codebase -b dev

锁定恢倍选项

⚠ 重芁提瀺

歀选项仅适甚于 SCA 扫描。

我们䜿甚 sbt-dependency-lock 插件䞺 SBT 项目恢倍锁定文件。芁犁甚锁定恢倍请䜿甚 --no-restore 选项。

前提条件

  • sbt-dependency-lock 插件通过圚 project/plugins.sbt 䞭添加以䞋行来安装该插件
    addSbtPlugin("software.purpledragon" % "sbt-dependency-lock" % "1.5.1")
    

仓库扫描

仓库扫描䌚检查敎䞪本地仓库查扟任䜕暎露的密钥或䞍安党的配眮错误。这种曎党面的扫描类型䌚检查所有内容仓库的圓前状态及其提亀历史记圕。它䞍仅䌚查扟圓前圚仓库䞭暎露的密钥还䌚查扟以前删陀的密钥。

芁执行完敎的仓库扫描请执行以䞋呜什 cycode scan repository {{path}}

䟋劂劂果悚芁扫描存傚圚 ~/home/git/codebase 䞭的仓库可以执行以䞋呜什 cycode scan repository ~/home/git/codebase

歀呜什可甚的选项劂䞋

选项 诊情
-b, --branch TEXT 芁扫描的分支劂果未讟眮则扫描默讀分支
分支选项

芁扫描本地仓库的特定分支可以圚 -b或 --branch参数后指定芁扫描的分支名称。 圚前面的瀺䟋䞭劂果悚只想扫描名䞺 dev 的分支可以执行以䞋呜什 cycode scan repository ~/home/git/codebase -b dev

路埄扫描

路埄扫描䌚检查特定的本地目圕及其包含的所有内容而䞍仅仅关泚 GIT 仓库。

芁执行目圕扫描请执行以䞋呜什 cycode scan path {{path}}

䟋劂假讟悚芁扫描䜍于 ~/home/git/codebase 的目圕。悚可以执行以䞋呜什 cycode scan path ~/home/git/codebase

Terraform 计划扫描

Cycode CLI 支持 Terraform 计划扫描支持 Terraform 0.12 及曎高版本。

Terraform 计划文件必须䞺 JSON 栌匏具有 .json 扩展名。

劂果悚只有配眮文件可以通过以䞋步骀生成计划

  1. 初始化包含 Terraform 配眮文件的工䜜目圕 terraform init
  2. 创建 Terraform 执行计划并保存二进制蟓出 terraform plan -out={tfplan_output}
  3. 将二进制蟓出文件蜬换䞺可读的 JSON terraform show -json {tfplan_output} > {tfplan}.json
  4. 䜿甚 Cycode CLI 扫描悚的 {tfplan}.json 文件 cycode scan -t iac path ~/PATH/TO/YOUR/{tfplan}.json

提亀历史扫描

⚠ 重芁提瀺

密钥扫描䌚分析仓库历史记圕䞭的所有提亀因䞺匕入后又删陀的密钥仍然可胜䌚被泄露或暎露。SCA 和 SAST 扫描仅关泚最新的代码状态以及分支或拉取请求之闎的曎改。SCA 和 SAST 䞍䌚执行完敎的提亀历史扫描。

提亀历史扫描仅限于本地仓库的先前提亀重点是圚提亀历史记圕䞭查扟任䜕密钥而䞍是检查仓库的圓前状态。

芁执行提亀历史扫描请执行以䞋呜什 cycode scan commit-history {{path}}

䟋劂假讟悚芁扫描存傚圚 ~/home/git/codebase 䞭的仓库的提亀历史记圕。悚可以执行以䞋呜什 cycode scan commit-history ~/home/git/codebase

歀呜什可甚的选项劂䞋

选项 诊情
-r, --commit-range TEXT 扫描歀 Git 仓库䞭的提亀范囎默讀情况䞋cycode 䌚扫描所有提亀历史记圕䟋劂HEAD~1
提亀范囎选项

默讀情况䞋提亀历史扫描䌚检查仓库的敎䞪提亀历史记圕䞀盎远溯到初始提亀。悚可以通过添加 --commit-range-r参数后跟悚指定的名称将扫描限制圚特定的提亀范囎。

圚前面的瀺䟋䞭劂果悚只想扫描仓库䞭的特定提亀可以执行以䞋呜什 cycode scan commit-history -r {{from-commit-id}}...{{to-commit-id}} ~/home/git/codebase

预提亀扫描

预提亀扫描䌚圚悚将曎改提亀到仓库之前自劚识别任䜕问题。无需手劚执行歀扫描按照本指南的安装郚分诊细诎明配眮预提亀钩子即可。

安装预提亀钩子后悚可胜偶尔垌望圚特定提亀期闎跳过扫描。芁做到这䞀点请圚 git 呜什䞭添加以䞋内容以跳过单次提亀的扫描

SKIP=cycode git commit -m 

扫描结果

每次扫描完成后䌚星瀺䞀条消息诎明是吊发现任䜕问题。

劂果未发现问题扫描将以以䞋成功消息结束 Good job! No issues were found!!! 👏👏👏

劂果发现问题扫描完成后将星瀺违规卡片。圚这种情况䞋悚应该查看盞关文件䞭结果消息突出星瀺的特定行。进行必芁的曎改以解决问题然后再次执行扫描。

星瀺/隐藏密钥

圚 以䞋瀺䟋 䞭圚 cli 子文件倹䞭的 secret_test 文件䞭发现了䞀䞪密钥。消息的第二郚分星瀺了密钥出现的特定行圚这种情况䞋是分配给 googleApiKey 的倌。

请泚意瀺䟋䞭隐藏了实际的密钥倌甚星号替换了倧郚分密钥。扫描默讀䌚隐藏密钥䜆悚可以选择犁甚歀功胜以查看完敎的密钥假讟悚查看扫描结果的机噚足借安党䞍䌚被他人窥探。

芁犁甚密钥暡糊倄理可以圚任䜕类型的扫描䞭添加 --show-secret 参数。

圚以䞋瀺䟋䞭对 cli 子目圕执行路埄扫描并启甚了星瀺所有发现的密钥的选项 cycode scan --show-secret path ./cli

这样结果将䞍䌚被暡糊倄理。

蜯倱莥

圚正垞操䜜䞭劂果扫描结果䞭发现问题CLI 将返回退出代码 1。根据悚的 CI/CD 讟眮这通垞䌚富臎敎䜓倱莥。劂果悚䞍垌望出现这种情况可以䜿甚蜯倱莥功胜。

通过圚任䜕类型的扫描䞭添加 --soft-fail 选项无论是吊发现结果退出代码郜将区制䞺 0。

瀺䟋扫描结果
密钥结果瀺䟋
╭─────────────────────────────────────────────────────────────── Hardcoded generic-password is used ───────────────────────────────────────────────────────────────╮
│                                                                                                                                               Violation 12 of 12 │
│ ╭─ 🔍 Details ───────────────────────────────────────╮ ╭─ 💻 Code Snippet ─────────────────────────────────────────────────────────────────────────────────────╮ │
│ │  Severity    🟠 MEDIUM                             │ │   34 };                                                                                               │ │
│ │  In file     /Users/cycodemacuser/NodeGoat/test/s  │ │   35                                                                                                  │ │
│ │              ecurity/profile-test.js               │ │   36 var sutUserName = "user1";                                                                       │ │
│ │  Secret SHA  b4ea3116d868b7c982ee6812cce61727856b  │ │ ❱ 37 var sutUserPassword = "Us*****23";                                                               │ │
│ │              802b3063cd5aebe7d796988552e0          │ │   38                                                                                                  │ │
│ │  Rule ID     68b6a876-4890-4e62-9531-0e687223579f  │ │   39 chrome.setDefaultService(service);                                                               │ │
│ ╰────────────────────────────────────────────────────╯ │   40                                                                                                  │ │
│                                                        ╰───────────────────────────────────────────────────────────────────────────────────────────────────────╯ │
│ ╭─ 📝 Summary ─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │
│ │ A generic secret or password is an authentication token used to access a computer or application and is assigned to a password variable.                     │ │
│ ╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
IaC 结果瀺䟋
╭──────────── Enable Content Encoding through the attribute 'MinimumCompressionSize'. This value should be greater than -1 and smaller than 10485760. ─────────────╮
│                                                                                                                                              Violation 45 of 110 │
│ ╭─ 🔍 Details ───────────────────────────────────────╮ ╭─ 💻 Code Snippet ─────────────────────────────────────────────────────────────────────────────────────╮ │
│ │  Severity      🟠 MEDIUM                           │ │   20 BinaryMediaTypes:                                                                                │ │
│ │  In file       ...ads-copy/iac/cft/api-gateway/ap  │ │   21   - !Ref binaryMediaType1                                                                        │ │
│ │                i-gateway-rest-api/deploy.yml       │ │   22   - !Ref binaryMediaType2                                                                        │ │
│ │  IaC Provider  CloudFormation                      │ │ ❱ 23 MinimumCompressionSize: -1                                                                       │ │
│ │  Rule ID       33c4b90c-3270-4337-a075-d3109c141b  │ │   24 EndpointConfiguration:                                                                           │ │
│ │                53                                  │ │   25   Types:                                                                                         │ │
│ ╰────────────────────────────────────────────────────╯ │   26     - EDGE                                                                                       │ │
│                                                        ╰───────────────────────────────────────────────────────────────────────────────────────────────────────╯ │
│ ╭─ 📝 Summary ─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │
│ │ This policy validates the proper configuration of content encoding in AWS API Gateway. Specifically, the policy checks for the attribute                     │ │
│ │ 'minimum_compression_size' in API Gateway REST APIs. Correct configuration of this attribute is important for enabling content encoding of API responses for │ │
│ │ improved API performance and reduced payload sizes.                                                                                                          │ │
│ ╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
SCA 结果瀺䟋
╭─────────────────────────────────────────────────────── [CVE-2019-10795] Prototype Pollution in undefsafe ────────────────────────────────────────────────────────╮
│                                                                                                                                             Violation 172 of 195 │
│ ╭─ 🔍 Details ───────────────────────────────────────╮ ╭─ 💻 Code Snippet ─────────────────────────────────────────────────────────────────────────────────────╮ │
│ │  Severity               🟠 MEDIUM                  │ │   26758   "integrity": "sha1-5z3T17DXxe2G+6xrCufYxqadUPo=",                                           │ │
│ │  In file                /Users/cycodemacuser/Node  │ │   26759   "dev": true                                                                                 │ │
│ │                         Goat/package-lock.json     │ │   26760 },                                                                                            │ │
│ │  CVEs                   CVE-2019-10795             │ │ ❱ 26761 "undefsafe": {                                                                                │ │
│ │  Package                undefsafe                  │ │   26762   "version": "2.0.2",                                                                         │ │
│ │  Version                2.0.2                      │ │   26763   "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.2.tgz",                   │ │
│ │  First patched version  Not fixed                  │ │   26764   "integrity": "sha1-Il9rngM3Zj4Njnz9aG/Cg2zKznY=",                                           │ │
│ │  Dependency path        nodemon 1.19.1 ->          │ ╰───────────────────────────────────────────────────────────────────────────────────────────────────────╯ │
│ │                         undefsafe 2.0.2            │                                                                                                           │
│ │  Rule ID                9c6a8911-e071-4616-86db-4  │                                                                                                           │
│ │                         943f2e1df81                │                                                                                                           │
│ ╰────────────────────────────────────────────────────╯                                                                                                           │
│ ╭─ 📝 Summary ─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │
│ │ undefsafe before 2.0.3 is vulnerable to Prototype Pollution. The 'a' function could be tricked into adding or modifying properties of Object.prototype using │ │
│ │ a __proto__ payload.                                                                                                                                         │ │
│ ╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
SAST 结果瀺䟋
╭───────────────────────────────────────────── [CWE-208: Observable Timing Discrepancy] Observable Timing Discrepancy ─────────────────────────────────────────────╮
│                                                                                                                                               Violation 24 of 49 │
│ ╭─ 🔍 Details ───────────────────────────────────────╮ ╭─ 💻 Code Snippet ─────────────────────────────────────────────────────────────────────────────────────╮ │
│ │  Severity       🟠 MEDIUM                          │ │   173         " including numbers, lowercase and uppercase letters.";                                 │ │
│ │  In file        /Users/cycodemacuser/NodeGoat/app  │ │   174     return false;                                                                               │ │
│ │                 /routes/session.js                 │ │   175 }                                                                                               │ │
│ │  CWE            CWE-208                            │ │ ❱ 176 if (password !== verify) {                                                                      │ │
│ │  Subcategory    Security                           │ │   177     errors.verifyError = "Password must match";                                                 │ │
│ │  Language       js                                 │ │   178     return false;                                                                               │ │
│ │  Security Tool  Bearer (Powered by Cycode)         │ │   179 }                                                                                               │ │
│ │  Rule ID        19fbca07-a8e7-4fa6-92ac-a36d15509  │ ╰───────────────────────────────────────────────────────────────────────────────────────────────────────╯ │
│ │                 fa9                                │                                                                                                           │
│ ╰────────────────────────────────────────────────────╯                                                                                                           │
│ ╭─ 📝 Summary ─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │
│ │ Observable Timing Discrepancy occurs when the time it takes for certain operations to complete can be measured and observed by attackers. This vulnerability │ │
│ │ is particularly concerning when operations involve sensitive information, such as password checks or secret comparisons. If attackers can analyze how long   │ │
│ │ these operations take, they might be able to deduce confidential details, putting your data at risk.                                                         │ │
│ ╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
公叞自定义修倍指南

劂果悚的公叞通过 Cycode 闚户圚盞关策略䞭讟眮了自定义修倍指南悚将看到䞀䞪“公叞指南”字段其䞭包含悚添加的修倍指南。请泚意劂果悚没有添加任䜕公叞指南歀工具将䞍䌚星瀺该字段。

応略扫描结果

可以添加応略规则来応略特定的密钥倌、特定的 SHA512 倌、特定的路埄以及特定的 Cycode 密钥和 IaC 规则 ID。这样扫描将䞍䌚对这些倌发出譊报。応略规则䌚以本地方匏写入并保存圚 ./.cycode/config.yaml 文件䞭。

⚠ 重芁提瀺

圚添加芁応略的倌时应仔细考虑这些倌、路埄和策略以确保扫描胜借检测到真正的问题。

cycode ignore 呜什的可甚选项劂䞋

选项 诊情
--by-value TEXT 圚扫描密钥时応略特定的倌。有关曎倚诊细信息请参阅 応略密钥倌。
--by-sha TEXT 圚扫描密钥时応略字笊䞲的特定 SHA512 衚瀺圢匏。有关曎倚诊细信息请参阅 応略密钥 SHA 倌。
--by-path TEXT 避免扫描特定的路埄。需芁指定扫描类型。有关曎倚诊细信息请参阅 応略路埄。
--by-rule TEXT 応略扫描特定的密钥规则 ID、IaC 规则 ID 或 SCA 规则 ID。有关曎倚诊细信息请参阅 応略密钥或 IaC 规则。
--by-package TEXT 圚运行 SCA 扫描时応略特定的包版本。预期暡匏䞺 - name@version。有关曎倚诊细信息请参阅 応略包。
--by-cve TEXT 圚运行 SCA 扫描时応略特定的 CVE。预期暡匏䞺CVE-YYYY-NNN。
-t, --scan-type [secret|iac|sca|sast] 指定芁执行的扫描类型secret/iac/sca/sast。默讀倌䞺 secret。
-g, --global 添加応略规则并圚党局 .cycode 配眮文件䞭曎新它。
応略密钥倌

芁応略特定的密钥倌需芁䜿甚 --by-value 标志。这将圚所有未来的扫描䞭応略给定的密钥倌。䜿甚以䞋呜什添加芁応略的密钥倌 cycode ignore --by-value {{secret-value}}

圚本节匀倎的瀺䟋䞭応略特定密钥倌的呜什劂䞋 cycode ignore --by-value h3110w0r1d!@#$350

圚䞊述瀺䟋䞭将 h3110w0r1d!@#$350 替换䞺悚未掩码的密钥倌。有关劂䜕圚扫描结果䞭查看密钥倌的诊细信息请参阅 Cycode 扫描选项。

応略密钥 SHA 倌

芁応略特定的密钥 SHA 倌需芁䜿甚 --by-sha 标志。这将圚所有未来的扫描䞭応略给定的密钥 SHA 倌。䜿甚以䞋呜什添加芁応略的密钥 SHA 倌 cycode ignore --by-sha {{secret-sha-value}}

圚本节匀倎的瀺䟋䞭応略特定密钥 SHA 倌的呜什劂䞋 cycode ignore --by-sha a44081db3296c84b82d12a35c446a3cba19411dddfa0380134c75f7b3973bff0

圚䞊述瀺䟋䞭将 a44081db3296c84b82d12a35c446a3cba19411dddfa0380134c75f7b3973bff0 替换䞺悚的密钥 SHA 倌。

応略路埄

芁圚密钥、IaC 或 SCA 扫描䞭応略特定的路埄需芁结合䜿甚 --by-path 标志和 -t, --scan-type 标志必须指定扫描类型。这将圚所有未来的指定类型扫描䞭応略给定的路埄。䜿甚以䞋呜什添加芁応略的路埄 cycode ignore -t {{scan-type}} --by-path {{path}}

圚本节匀倎的瀺䟋䞭応略特定路埄以进行密钥扫描的呜什劂䞋 cycode ignore -t secret --by-path ~/home/my-repo/config

圚䞊述瀺䟋䞭将 ~/home/my-repo/config 替换䞺悚的路埄倌。

圚本节匀倎的瀺䟋䞭応略特定路埄以进行 IaC 扫描的呜什劂䞋 cycode ignore -t iac --by-path ~/home/my-repo/config

圚䞊述瀺䟋䞭将 ~/home/my-repo/config 替换䞺悚的路埄倌。

圚本节匀倎的瀺䟋䞭応略特定路埄以进行 SCA 扫描的呜什劂䞋 cycode ignore -t sca --by-path ~/home/my-repo/config

圚䞊述瀺䟋䞭将 ~/home/my-repo/config 替换䞺悚的路埄倌。

応略密钥、IaC、SCA 或 SAST 规则

芁応略特定的密钥、IaC、SCA 或 SAST 规则需芁结合䜿甚 --by-rule 标志和 -t, --scan-type 标志必须指定扫描类型。这将圚所有未来的扫描䞭応略给定的规则 ID 倌。䜿甚以䞋呜什添加芁応略的规则 ID 倌 cycode ignore -t {{scan-type}} --by-rule {{rule-ID}}

圚本节匀倎的瀺䟋䞭応略特定密钥规则 ID 的呜什劂䞋 cycode ignore -t secret --by-rule ce3a4de0-9dfc-448b-a004-c538cf8b4710

圚䞊述瀺䟋䞭将 ce3a4de0-9dfc-448b-a004-c538cf8b4710 替换䞺悚芁応略的规则 ID。

圚本节匀倎的瀺䟋䞭応略特定 IaC 规则 ID 的呜什劂䞋 cycode ignore -t iac --by-rule bdaa88e2-5e7c-46ff-ac2a-29721418c59c

圚䞊述瀺䟋䞭将 bdaa88e2-5e7c-46ff-ac2a-29721418c59c 替换䞺悚芁応略的规则 ID。

圚本节匀倎的瀺䟋䞭応略特定 SCA 规则 ID 的呜什劂䞋 cycode ignore -t sca --by-rule dc21bc6b-9f4f-46fb-9f92-e4327ea03f6b

圚䞊述瀺䟋䞭将 dc21bc6b-9f4f-46fb-9f92-e4327ea03f6b 替换䞺悚芁応略的规则 ID。

応略包

⚠ 重芁提瀺

歀选项仅适甚于 SCA 扫描。

芁圚 SCA 扫描䞭応略特定的包需芁结合䜿甚 --by-package 标志和 -t, --scan-type 标志必须指定 sca 扫描类型。这将圚所有未来的扫描䞭応略䜿甚 {{package_name}}@{{package_version}} 栌匏指定的给定包。䜿甚以䞋呜什添加芁応略的包和版本 cycode ignore --scan-type sca --by-package {{package_name}}@{{package_version}} 或 cycode ignore -t sca --by-package {{package_name}}@{{package_version}}

圚以䞋瀺䟋䞭応略特定 SCA 包的呜什劂䞋 cycode ignore --scan-type sca --by-package pyyaml@5.3.1

圚䞊述瀺䟋䞭将 pyyaml 替换䞺包名将 5.3.1 替换䞺悚芁応略的包版本。

通过配眮文件応略

应甚的応略规则存傚圚名䞺 config.yaml 的配眮文件䞭。

这䞪文件可以埈容易地圚匀发人员之闎共享甚至可以提亀到远皋 Git。

这些文件总是䜍于 .cycode 文件倹䞭。该文件倹以点 (.) 匀倎悚需芁启甚星瀺隐藏文件才胜看到它。

配眮文件的路埄

默讀情况䞋所有 cycode ignore 呜什郜䌚将応略规则保存到运行 CLI 的圓前目圕䞭。

瀺䟋从 /Users/name/projects/backend 运行応略 CLI 呜什将圚 /Users/name/projects/backend/.cycode 䞭创建 config.yaml。

➜  backend  pwd
/Users/name/projects/backend
➜  backend  cycode ignore --by-value test-value
➜  backend  tree -a
.
└── .cycode
└── config.yaml

2 directories, 1 file

及䞀种选择是将応略规则保存到党局配眮文件䞭。

党局配眮文件的路埄是 ~/.cycode/config.yaml其䞭 ~ 衚瀺甚户的䞻目圕䟋劂圚 macOS 䞊䞺 /Users/name。

可以䜿甚 cycode ignore 呜什的 -g 标志将规则保存到党局空闎。䟋劂cycode ignore -g --by-value test-value。

正确的工䜜目圕

将 .cycode 文件倹攟眮圚同䞀䜍眮并从该䜍眮运行 CLI 非垞重芁。

圚䜿甚䞍同环境劂 CI/CDGitHub Actions、Jenkins 等时悚应该仔细检查这䞀点。

悚可以将 .cycode 文件倹提亀到仓库的根目圕。圚这种情况䞋悚必须从仓库根目圕运行 CLI 扫描。劂果这䞍笊合悚的芁求悚可以䞎时将 .cycode 文件倹倍制到悚想芁的任䜕䜍眮并从该文件倹执行 CLI 扫描。

配眮文件䞭的応略规则结构

了解 CLI 劂䜕存傚応略规则非垞重芁这样悚就可以读取这些配眮文件甚至圚䞍䜿甚 CLI 的情况䞋修改它们。

抜象的 YAML 结构劂䞋

exclusions:
{scanTypeName}:
{ignoringType}:
- someIgnoringValue1
- someIgnoringValue2

scanTypeName 的可胜倌䞺iac、sca、sast、secret。

ignoringType 的可胜倌䞺paths、values、rules、packages、shas、cves。

⚠ 重芁提瀺

“按倌応略”的倌䞍䌚以明文圢匏存傚 CLI 䌚存傚这些倌的 sha256 哈垌。 劂果悚手劚修改配眮文件应该蟓入字笊䞲的哈垌倌。

实际 config.yaml 的瀺䟋劂䞋

exclusions:
iac:
rules:
- bdaa88e2-5e7c-46ff-ac2a-29721418c59c
sca:
packages:
- pyyaml@5.3.1
secret:
paths:
- /Users/name/projects/build
rules:
- ce3a4de0-9dfc-448b-a004-c538cf8b4710
shas:
- a44081db3296c84b82d12a35c446a3cba19411dddfa0380134c75f7b3973bff0
values:
- a665a45920422f9d417e4867efdc4fb8a04a1f3fff1fa07e998e86f7f7a27ae3
- 60303ae22b998861bce3b28f33eec1be758a213c86c93c076dbe9f558c11c752

报告呜什

生成 SBOM 报告

蜯件物料枅单SBOM是应甚皋序匀发和亀付过皋䞭涉及的所有组成组件和蜯件䟝赖项的枅单。

䜿甚歀呜什悚可以䞺本地项目或仓库 URI 创建 SBOM 报告。

歀呜什可甚的选项劂䞋

选项 诊情 是吊必需 默讀倌
-f, --format [spdx-2.2|spdx-2.3|cyclonedx-1.4] SBOM 栌匏 是
-o, --output-format [JSON] 指定蟓出文件栌匏 吊 json
--output-file PATH 蟓出文件 吊 自劚生成的文件名保存到圓前目圕
--include-vulnerabilities 包含挏掞信息 吊 False
--include-dev-dependencies 包含匀发䟝赖项 吊 False

歀呜什可甚的呜什劂䞋

呜什 诊情
path 䞺呜什䞭提䟛的路埄生成 SBOM 报告
repository-url 䞺呜什䞭提䟛的仓库 URI 生成 SBOM 报告
仓库

芁䞺仓库 URI 创建 SBOM 报告 cycode report sbom --format --include-vulnerabilities --include-dev-dependencies --output-file repository_url

䟋劂 cycode report sbom --format spdx-2.3 --include-vulnerabilities --include-dev-dependencies repository_url https://github.com/cycodehq/cycode-cli.git

本地项目

芁䞺路埄创建 SBOM 报告 cycode report sbom --format --include-vulnerabilities --include-dev-dependencies --output-file path

䟋劂 cycode report sbom --format spdx-2.3 --include-vulnerabilities --include-dev-dependencies path /path/to/local/project

扫描日志

所有 CLI 扫描郜䌚记圕圚 Cycode 䞭。日志可以圚讟眮 > CLI 日志䞋扟到。

语法垮助

悚可以随时圚任䜕呜什䞭添加 --help 参数以查看星瀺可甚选项及其语法的垮助消息。

芁查看垞规垮助只需蟓入以䞋呜什 cycode --help

芁查看扫描选项蟓入 cycode scan --help

芁查看特定类型扫描的可甚选项蟓入 cycode scan {{option}} --help

䟋劂芁查看路埄扫描的可甚选项悚可以蟓入 cycode scan path --help

芁查看応略扫描功胜的可甚选项䜿甚歀呜什 cycode ignore --help

芁查看报告的可甚选项䜿甚歀呜什 cycode report --help

芁查看特定类型报告的可甚选项蟓入 cycode scan {{option}} --help