Cycode åœä»€è¡çé¢ïŒCLIïŒæ¯äžæ¬Ÿå¯åšæ¬å°å®è£ çåºçšçšåºïŒçšäºæ«æä»£ç ä»åºïŒæ£æµå ¶äžæ¯åŠååšå¯é¥ä¿¡æ¯ãåºç¡è®Ÿæœå³ä»£ç ïŒIaCïŒçé误é 眮ã蜯件æååæïŒSCAïŒæŒæŽä»¥åéæåºçšå®å šæµè¯ïŒSASTïŒé®é¢ãæ¬æåå°åžŠé¢æšäºè§£è¯¥å·¥å ·çå®è£ åäœ¿çšæ¹æ³ã
Cycode CLI æ¯äžæ¬ŸåŒºå€§çä»£ç æ«æå·¥å ·ïŒèœæ£æµä»£ç äžå€ç§å®å šé®é¢ã䜿çšåéç¡®ä¿æ»¡è¶³çžå ³å眮æ¡ä»¶ïŒåæç §å®è£ æ¥éª€å®æå®è£ ïŒä¹åå°±å¯ä»¥æ ¹æ®éæ±éæ©åéçæ«æåœä»€è¿è¡ä»£ç æ«æã
[cycode auth åœä»€](#using-the-auth-command) æ¥éè¿ CLI 对 Cycode è¿è¡èº«ä»œéªè¯ã
åšæ¬å°æºåšäžå®è£ Cycode CLI åºçšçšåºïŒå¯æä»¥äžæ¥éª€æäœïŒ
pip3 install cycode
brew install cycode
cd /path/to/downloaded/cycode-cli
chmod +x cycode
./cycode
â ïž éèŠæç€º
è¿æ¯åšæ¬å°æºåšäžè®Ÿçœ®äž Cycode CLI è¿è¡èº«ä»œéªè¯ç æšè æ¹æ³ã
cycode authâ ïž éèŠæç€º
è¿å°æ¯äž Cycode CLI è¿è¡èº«ä»œéªè¯çé»è®€æ¹æ³ã
Successfully logged into cycodeâ ïž éèŠæç€º
åŠææšå·²ç»éè¿ Linux æ Windows ç¯å¢åéè®Ÿçœ®äº Cycode 客æ·ç«¯ ID å客æ·ç«¯å¯é¥ïŒè¿äºåæ®å°äŒå äºæ€æ¹æ³ã
cycode configure
Cycode API URL [https://api.cycode.com]: https://api.onpremise.comCycode APP URL [https://app.cycode.com]: https://app.onpremise.comCycode Client ID []: 7fe5346b-xxxx-xxxx-xxxx-55157625c72dCycode Client Secret []: c1e24929-xxxx-xxxx-xxxx-8b08c1839a2eSuccessfully configured CLI credentials!
æ/å
Successfully configured Cycode URLs!åŠææšè¿å
¥ç𿷿件倹äžç .cycode æä»¶å€¹ïŒäŒåç°è¿äºåæ®å·²å建并æŸçœ®åšè¯¥æä»¶å€¹äžç credentials.yaml æä»¶äžãURL åæŸçœ®åšè¯¥æä»¶å€¹äžç config.yaml æä»¶äžã
export CYCODE_CLIENT_ID={your Cycode ID}
å
export CYCODE_CLIENT_SECRET={your Cycode Secret Key}
CYCODE_CLIENT_ID å CYCODE_CLIENT_SECRET åéïŒå¹¶åå«å°å
¶åŒè®Ÿçœ®äžºæšç ID åå¯é¥ãcycode.exe æ·»å å°è·¯åŸäžä»¥å®æå®è£
ãCycode çé¢æäº€é©åå¯ä»¥åšæšçæ¬å°ä»åºäžè®Ÿçœ®ïŒä»¥äŸ¿ Cycode CLI åºçšçšåºåšæšå°ä»£ç æäº€å°ä»£ç åºä¹åèªåšè¯å«ä»£ç äžçä»»äœé®é¢ã
â ïž éèŠæç€º
é¢æäº€é©åäžéçšäº IaC æ«æã
æ§è¡ä»¥äžæ¥éª€å®è£ é¢æäº€é©åïŒ
pip3 install pre-commit
.pre-commit-config.yamlïŒå
å«åŒå€Žç .ïŒçæ° YAML æä»¶ïŒå
容åŠäžïŒrepos:
- repo: https://github.com/cycodehq/cycode-cli
rev: v3.2.0
hooks:
- id: cycode
stages:
- pre-commit
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
pre-commit install
é©åå®è£
æååå°æŸç€ºæ¶æ¯ïŒPre-commit installed at .git/hooks/pre-commitãpre-commit autoupdate
å®å°èªåšå° .pre-commit-config.yaml äžç rev æŽæ°å° Cycode CLI çææ°å¯çšçæ¬ãâ ïž éèŠæç€º
è§Šåæäœåçåš
git commitåœä»€äžã é©åä» å¯¹æåæäº€çæä»¶è§Šåã
ä»¥äžæ¯äžäºåžžè§åœä»€çåºç¡çšæ³ç€ºäŸïŒ
cycode auth
cycode configure
cycode scan repository ~/home/git/codebase
cycode mcp -t streamable-http -H 0.0.0.0 -p 9000
cycode scan -t sca --severity-threshold HIGH --verbose repository ~/home/git/codebase
| é项 | 诊æ |
|---|---|
-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 åœä»€ä» éçšäº 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ç¯å¢åéã
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 æå¡åšæäŸä»¥äžå·¥å ·äŸ AI ç³»ç»äœ¿çšïŒ
| å·¥å ·åç§° | 诊æ |
|---|---|
cycode_secret_scan |
æ«ææä»¶äžç硬çŒç å¯é¥ |
cycode_sca_scan |
æ«ææä»¶äžç蜯件æååæïŒSCAïŒæŒæŽå讞å¯è¯é®é¢ |
cycode_iac_scan |
æ«ææä»¶äžçåºç¡è®Ÿæœå³ä»£ç ïŒIaCïŒé误é 眮 |
cycode_sast_scan |
æ«ææä»¶äžçéæåºçšå®å šæµè¯ïŒSASTïŒä»£ç 莚éåå®å šçŒºé· |
cycode_status |
è·å Cycode CLI çæ¬ã身仜éªè¯ç¶æåé çœ®ä¿¡æ¯ |
cycode mcp
cycode mcp -t stdio
cycode mcp -t sse -p 8080
cycode mcp -t streamable-http -H 0.0.0.0 -p 9000
äºè§£æŽå€å ³äº MCP äŒ èŸç±»åçä¿¡æ¯ïŒè¯·åé MCP åè®®è§è - äŒ èŸã
â ïž éèŠæç€º
å¯¹äºæ¬§ç 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 对象ã
{
"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"
}
}
}
}
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"
}
}
}
}
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"
}
}
}
}
{
"mcpServers": {
"cycode": {
"url": "http://127.0.0.1:8000/sse"
}
}
}
{
"mcpServers": {
"cycode": {
"url": "http://127.0.0.1:8080/sse"
}
}
}
{
"mcpServers": {
"cycode": {
"url": "http://127.0.0.1:8000/mcp"
}
}
}
# åšåå°å¯åš MCP æå¡åš
cycode mcp -t sse -p 8000 &
# åš mcp.json äžé
眮
{
"mcpServers": {
"cycode": {
"url": "http://127.0.0.1:8000/sse"
}
}
}
# åšåå°å¯åš 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 æå¡åšæ¶éå°é®é¢ïŒå¯ä»¥å¯çšè°è¯æ¥å¿ä»¥è·åæŽè¯Šç»çä¿¡æ¯ãæäž€ç§æ¹æ³å¯ä»¥å¯çšè°è¯æ¥å¿ïŒ
-v æ --verbose æ å¿ïŒcycode -v mcp
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 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è§è²æèœæ¥çæ€é¡µé¢ã

æ¥å页é¢å°ç±»äŒŒäºä»¥äžå 容ïŒ

â ïž éèŠæç€º
æ€éé¡¹ä» éçšäº 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
Cycode CLI æ¯æ Terraform è®¡åæ«æïŒæ¯æ Terraform 0.12 åæŽé«çæ¬ïŒã
Terraform 计åæä»¶å¿
须䞺 JSON æ ŒåŒïŒå
·æ .json æ©å±åïŒã
åŠææšåªæé 眮æä»¶ïŒå¯ä»¥éè¿ä»¥äžæ¥éª€çæè®¡åïŒ
terraform initterraform plan -out={tfplan_output}terraform show -json {tfplan_output} > {tfplan}.json{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. â â
â â°ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ⯠â
â°âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ¯
âââââââââââââ 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. â â
â â°ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ⯠â
â°âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ¯
ââââââââââââââââââââââââââââââââââââââââââââââââââââââââ [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. â â
â â°ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ⯠â
â°âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ¯
ââââââââââââââââââââââââââââââââââââââââââââââ [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 åŒïŒéèŠäœ¿çš --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 è§åïŒéèŠç»åäœ¿çš --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ïŒæ¯åºçšçšåºåŒåå亀ä»è¿çšäžæ¶åçææç»æç»ä»¶å蜯件äŸèµé¡¹çæž åã
äœ¿çšæ€åœä»€ïŒæšå¯ä»¥äžºæ¬å°é¡¹ç®æä»åº 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
äŸåŠïŒ
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
äŸåŠïŒ
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