Cycode MCP Server

ทางการ

เพิ่มความปลอดภัยในวงจรการพัฒนาซอฟต์แวร์ของคุณด้วยการสแกน SAST, SCA, Secrets และ IaC ผ่าน Cycode

เอกสาร

คู่มือผู้ใช้ Cycode CLI

Cycode Command Line Interface (CLI) เป็นแอปพลิเคชันที่คุณสามารถติดตั้งในเครื่องเพื่อสแกนรีพอสิทอรีของคุณเพื่อค้นหาซีเคร็ต, การกำหนดค่าโครงสร้างพื้นฐานที่ผิดพลาด (IaC), ช่องโหว่จากการวิเคราะห์องค์ประกอบซอฟต์แวร์ (SCA) และปัญหาจากการทดสอบความปลอดภัยของแอปพลิเคชันแบบสแตติก (SAST)

คู่มือนี้จะแนะนำคุณเกี่ยวกับการติดตั้งและการใช้งาน

สารบัญ

  1. ข้อกำหนดเบื้องต้น
  2. การติดตั้ง
    1. ติดตั้ง Cycode CLI
      1. การใช้คำสั่ง Auth
      2. การใช้คำสั่ง Configure
      3. เพิ่มลงในตัวแปรสภาพแวดล้อม
        1. บน Unix/Linux
        2. บน Windows
    2. ติดตั้ง Pre-Commit Hook
  3. คำสั่ง Cycode CLI
  4. คำสั่ง MCP
    1. การเริ่มต้น MCP Server
    2. ตัวเลือกที่ใช้ได้
    3. เครื่องมือ MCP
    4. ตัวอย่างการใช้งาน
    5. การกำหนดค่าขั้นสูง
  5. คำสั่ง Platform
    1. การค้นหาคำสั่ง
    2. ตัวอย่าง
    3. หมายเหตุและข้อจำกัด
  6. คำสั่ง Scan
    1. การรันการสแกน
      1. ตัวเลือก
        1. เกณฑ์ความรุนแรง
        2. Monitor
        3. รายงาน Cycode
        4. ช่องโหว่ของแพ็กเกจ
        5. การปฏิบัติตามใบอนุญาต
        6. Lock Restore
        7. หยุดเมื่อเกิดข้อผิดพลาด
      2. การสแกนรีพอสิทอรี
        1. ตัวเลือก Branch
      3. การสแกนพาธ
        1. การสแกน Terraform Plan
      4. การสแกนประวัติ Commit
        1. ตัวเลือกช่วง Commit (การสแกน Diff)
      5. การสแกน Pre-Commit
      6. การสแกน Pre-Push
    2. ผลลัพธ์การสแกน
      1. แสดง/ซ่อนซีเคร็ต
      2. Soft Fail
      3. ตัวอย่างผลลัพธ์การสแกน
        1. ตัวอย่างผลลัพธ์ Secrets
        2. ตัวอย่างผลลัพธ์ IaC
        3. ตัวอย่างผลลัพธ์ SCA
        4. ตัวอย่างผลลัพธ์ SAST
      4. แนวทางการแก้ไขเฉพาะของบริษัท
    3. การละเว้นผลลัพธ์การสแกน
      1. การละเว้นค่าซีเคร็ต
      2. การละเว้นค่า SHA ของซีเคร็ต
      3. การละเว้นพาธ
      4. การละเว้นกฎ Secret, IaC หรือ SCA
      5. การละเว้นแพ็กเกจ
      6. การละเว้นผ่านไฟล์ config
  7. คำสั่ง Report
    1. การสร้างรายงาน SBOM
  8. คำสั่ง Import
  9. บันทึกการสแกน
  10. วิธีใช้ไวยากรณ์

ข้อกำหนดเบื้องต้น

  • แอปพลิเคชัน Cycode CLI ต้องการ Python เวอร์ชัน 3.9 ขึ้นไป คำสั่ง MCP ใช้ได้เฉพาะกับ Python 3.10 ขึ้นไป หากคุณใช้ Python เวอร์ชันก่อนหน้า คำสั่งนี้จะไม่สามารถใช้ได้
  • ใช้ คำสั่ง cycode auth เพื่อตรวจสอบสิทธิ์กับ Cycode ด้วย CLI
    • หรือคุณสามารถรับ Cycode Client ID และ Client Secret Key ได้โดยทำตามขั้นตอนที่ระบุในหน้า Service Account Token และ Personal Access Token ซึ่งมีรายละเอียดเกี่ยวกับการรับค่าเหล่านี้

การติดตั้ง

ขั้นตอนการติดตั้งต่อไปนี้ใช้ได้กับทั้งระบบปฏิบัติการ Windows และ UNIX / Linux

[!NOTE] ขั้นตอนต่อไปนี้สมมติว่าใช้ python3 และ pip3 สำหรับคำสั่งที่เกี่ยวข้องกับ Python อย่างไรก็ตาม บางระบบอาจใช้คำสั่ง python และ pip แทน ขึ้นอยู่กับการกำหนดค่าสภาพแวดล้อม Python ของคุณ

ติดตั้ง Cycode CLI

ในการติดตั้งแอปพลิเคชัน Cycode CLI บนเครื่องของคุณ ให้ทำตามขั้นตอนต่อไปนี้:

  1. เปิดแอปพลิเคชัน command line หรือ terminal ของคุณ

  2. รันคำสั่งใดคำสั่งหนึ่งต่อไปนี้:

    • เพื่อติดตั้งจาก PyPI:

      pip3 install cycode
      
    • เพื่อติดตั้งจาก Homebrew:

      brew install cycode
      
    • เพื่อติดตั้งจาก GitHub Releases ไปที่หน้าและดาวน์โหลดไฟล์ปฏิบัติการสำหรับระบบปฏิบัติการและสถาปัตยกรรมของคุณ จากนั้นรันคำสั่งต่อไปนี้:

    cd /path/to/downloaded/cycode-cli
    chmod +x cycode
    ./cycode
    
  3. สุดท้ายตรวจสอบสิทธิ์ CLI มีสามวิธีในการตั้งค่า Cycode client ID และข้อมูลประจำตัว (client secret หรือ OIDC ID token):

การใช้คำสั่ง Auth

[!NOTE] นี่เป็นวิธีที่ แนะนำ สำหรับการตั้งค่าเครื่องของคุณเพื่อตรวจสอบสิทธิ์กับ Cycode CLI

  1. พิมพ์คำสั่งต่อไปนี้ลงในหน้าต่าง terminal/command line ของคุณ:

    cycode auth

  2. หน้าต่างเบราว์เซอร์จะปรากฏขึ้น เพื่อขอให้คุณเข้าสู่ระบบ Cycode (ดังที่เห็นด้านล่าง):

    Cycode login
  3. ป้อนข้อมูลประจำตัวการเข้าสู่ระบบของคุณในหน้านี้และเข้าสู่ระบบ

  4. ในที่สุดคุณจะถูกนำไปยังหน้าด้านล่าง ซึ่งคุณจะถูกขอให้เลือกกลุ่มธุรกิจที่คุณต้องการอนุญาต Cycode (ถ้ามี):

    authorize CLI

    [!NOTE] นี่จะเป็นวิธีเริ่มต้นสำหรับการตรวจสอบสิทธิ์กับ Cycode CLI

  5. คลิกปุ่ม Allow เพื่ออนุญาต Cycode CLI ในกลุ่มธุรกิจที่เลือก

    allow CLI
  6. เมื่อเสร็จสิ้น คุณจะเห็นหน้าจอต่อไปนี้หากเลือกสำเร็จ:

    successfully auth
  7. ในหน้าจอ terminal/command line คุณจะเห็นข้อความต่อไปนี้เมื่อออกจากหน้าต่างเบราว์เซอร์:

    Successfully logged into cycode

การใช้คำสั่ง Configure

[!NOTE] หากคุณตั้งค่า Cycode Client ID และ Client Secret ผ่านตัวแปรสภาพแวดล้อมของ Linux หรือ Windows แล้ว ข้อมูลประจำตัวเหล่านั้นจะมีความสำคัญเหนือกว่าวิธีนี้

  1. พิมพ์คำสั่งต่อไปนี้ลงในหน้าต่าง terminal/command line ของคุณ:

    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 Client ID ของคุณ

    Cycode Client ID []: 7fe5346b-xxxx-xxxx-xxxx-55157625c72d

  5. ป้อนค่า Cycode Client Secret ของคุณ (ข้ามหากคุณวางแผนที่จะใช้ OIDC ID token)

    Cycode Client Secret []: c1e24929-xxxx-xxxx-xxxx-8b08c1839a2e

  6. ป้อนค่า Cycode OIDC ID Token ของคุณ (ไม่บังคับ)

    Cycode ID Token []: eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9...

  7. หากป้อนค่าสำเร็จ คุณจะเห็นข้อความต่อไปนี้:

    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}

หากองค์กรของคุณใช้การตรวจสอบสิทธิ์ OIDC คุณสามารถให้ ID token แทน (หรือเพิ่มเติม):

export CYCODE_ID_TOKEN={your Cycode OIDC ID token}

บน Windows

  1. จาก Control Panel ไปที่เมนู System:

    system menu
  2. ถัดไป คลิก Advanced system settings:

    advanced system setting
  3. ในหน้าต่าง System Properties ที่เปิดขึ้น ให้คลิกปุ่ม Environment Variables:

    environments variables button
  4. สร้างตัวแปร CYCODE_CLIENT_ID และ CYCODE_CLIENT_SECRET ด้วยค่าที่ตรงกับ ID และ Secret Key ของคุณตามลำดับ หากคุณตรวจสอบสิทธิ์ผ่าน OIDC ให้เพิ่ม CYCODE_ID_TOKEN ด้วยค่า OIDC ID token ของคุณด้วย:

    environment variables window
  5. แทรก cycode.exe ลงในพาธเพื่อทำการติดตั้งให้เสร็จสมบูรณ์

ติดตั้ง Pre-Commit Hook

Pre-commit และ pre-push hooks ของ Cycode สามารถตั้งค่าได้ภายในรีพอสิทอรีในเครื่องของคุณ เพื่อให้แอปพลิเคชัน Cycode CLI ระบุปัญหาใดๆ ในโค้ดของคุณโดยอัตโนมัติก่อนที่คุณจะ commit หรือ push ไปยัง codebase ของคุณ

[!NOTE] Pre-commit และ pre-push hooks ไม่สามารถใช้ได้กับการสแกน IaC

ทำตามขั้นตอนต่อไปนี้เพื่อติดตั้ง pre-commit hook:

การติดตั้ง Pre-Commit Hook

  1. ติดตั้ง pre-commit framework (ต้องติดตั้ง Python 3.9 ขึ้นไป):

    pip3 install pre-commit
    
  2. ไปที่ไดเรกทอรีบนสุดของรีพอสิทอรี Git ในเครื่องที่คุณต้องการกำหนดค่า

  3. สร้างไฟล์ YAML ใหม่ชื่อ .pre-commit-config.yaml (รวมจุดเริ่มต้น .) ในไดเรกทอรีบนสุดของรีพอสิทอรีที่มีเนื้อหาดังต่อไปนี้:

    repos:
      - repo: https://github.com/cycodehq/cycode-cli
        rev: v3.5.0
        hooks:
          - id: cycode
            stages: [pre-commit]
    
  4. แก้ไขไฟล์ที่สร้างขึ้นตามความต้องการเฉพาะของคุณ ใช้ hook ID cycode เพื่อเปิดใช้งานการสแกน Secrets ใช้ hook ID cycode-sca เพื่อเปิดใช้งานการสแกน SCA ใช้ hook ID cycode-sast เพื่อเปิดใช้งานการสแกน SAST หากคุณต้องการเปิดใช้งานการสแกนทุกประเภท ให้ใช้การกำหนดค่านี้:

    repos:
      - repo: https://github.com/cycodehq/cycode-cli
        rev: v3.5.0
        hooks:
          - id: cycode
            stages: [pre-commit]
          - id: cycode-sca
            stages: [pre-commit]
          - id: cycode-sast
            stages: [pre-commit]
    
  5. ติดตั้ง hook ของ Cycode:

    pre-commit install
    

    การติดตั้ง hook ที่สำเร็จจะแสดงข้อความ: Pre-commit installed at .git/hooks/pre-commit

  6. อัปเดต pre-commit hook ให้ทันสมัยอยู่เสมอ:

    pre-commit autoupdate
    

    มันจะอัปเดต rev ใน .pre-commit-config.yaml เป็นเวอร์ชันล่าสุดของ Cycode CLI โดยอัตโนมัติ

[!NOTE] ทริกเกอร์เกิดขึ้นกับคำสั่ง git commit Hook จะทริกเกอร์เฉพาะไฟล์ที่ staged สำหรับ commit เท่านั้น

การติดตั้ง Pre-Push Hook

ในการติดตั้ง pre-push hook เพิ่มเติมหรือแทน pre-commit hook:

  1. เพิ่ม pre-push hooks ลงในไฟล์ .pre-commit-config.yaml ของคุณ:

    repos:
      - repo: https://github.com/cycodehq/cycode-cli
        rev: v3.5.0
        hooks:
          - id: cycode-pre-push
            stages: [pre-push]
    
  2. ติดตั้ง pre-push hook:

    pre-commit install --hook-type pre-push
    
  3. สำหรับทั้ง pre-commit และ pre-push hooks ให้ใช้:

    pre-commit install
    pre-commit install --hook-type pre-push
    

[!NOTE] Pre-push hooks ทริกเกอร์กับคำสั่ง git push และสแกนเฉพาะ commits ที่กำลังจะถูก push

คำสั่ง Cycode CLI

ต่อไปนี้คือตัวเลือกและคำสั่งที่ใช้ได้กับแอปพลิเคชัน Cycode CLI:

ตัวเลือกคำอธิบาย
-v, --verboseแสดงบันทึกโดยละเอียด
--no-progress-meterไม่แสดงแถบความคืบหน้า
--no-update-notifierไม่ตรวจสอบการอัปเดต CLI
-o, --output [rich|text|json|table]ระบุประเภทผลลัพธ์ ค่าเริ่มต้นคือ rich
--client-id TEXTระบุ Cycode client ID สำหรับการสแกนครั้งนี้โดยเฉพาะ
--client-secret TEXTระบุ Cycode client secret สำหรับการสแกนครั้งนี้โดยเฉพาะ
--id-token TEXTระบุ Cycode OIDC ID token สำหรับการสแกนครั้งนี้โดยเฉพาะ
--install-completionติดตั้งการเติมคำสั่งอัตโนมัติสำหรับ shell ปัจจุบัน
--show-completion [bash|zsh|fish|powershell|pwsh]แสดงการเติมคำสั่งอัตโนมัติสำหรับ shell ที่ระบุ เพื่อคัดลอกหรือปรับแต่งการติดตั้ง
-h, --helpแสดงตัวเลือกสำหรับคำสั่งที่กำหนด
คำสั่งคำอธิบาย
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
authตรวจสอบสิทธิ์เครื่องของคุณเพื่อเชื่อมโยง CLI กับบัญชี Cycode ของคุณ
configureคำสั่งเริ่มต้นเพื่อกำหนดค่าการตรวจสอบสิทธิ์ไคลเอนต์ CLI ของคุณ
ignoreละเว้นค่า พาธ หรือรหัสกฎที่ระบุ
mcpเริ่มเซิร์ฟเวอร์ Model Context Protocol (MCP) เพื่อเปิดใช้งานการผสานรวม AI กับความสามารถในการสแกนของ Cycode
scanสแกนเนื้อหาเพื่อหาการละเมิด Secrets/IaC/SCA/SAST คุณจะต้องระบุประเภทการสแกนที่จะดำเนินการ: commit-history/path/repository/etc.
reportสร้างรายงาน คุณจะต้องระบุประเภทรายงานที่จะดำเนินการเป็น SBOM
statusแสดงสถานะ CLI และออก

คำสั่ง MCP [การทดลอง]

[!WARNING] คำสั่ง MCP พร้อมใช้งานสำหรับ Python 3.10 ขึ้นไปเท่านั้น หากคุณใช้ Python เวอร์ชันก่อนหน้า คำสั่งนี้จะไม่พร้อมใช้งาน

คำสั่ง Model Context Protocol (MCP) ช่วยให้คุณเริ่มเซิร์ฟเวอร์ MCP ที่เปิดเผยความสามารถในการสแกนของ Cycode แก่ระบบ AI และแอปพลิเคชัน ซึ่งช่วยให้โมเดล AI สามารถโต้ตอบกับเครื่องมือ Cycode CLI ผ่านโปรโตคอลมาตรฐาน

[!TIP] เพื่อประสบการณ์ที่ดีที่สุด ให้ติดตั้ง Cycode CLI แบบทั่วโลกบนระบบของคุณโดยใช้ pip install cycode หรือ brew install cycode จากนั้นตรวจสอบสิทธิ์ครั้งเดียวด้วย cycode auth หลังจากการติดตั้งและตรวจสอบสิทธิ์แบบทั่วโลก คุณจะไม่จำเป็นต้องกำหนดค่าตัวแปรสภาพแวดล้อม CYCODE_CLIENT_ID และ CYCODE_CLIENT_SECRET ในไฟล์การกำหนดค่า MCP ของคุณ

Add MCP Server to Cursor using UV

การเริ่มเซิร์ฟเวอร์ MCP

ในการเริ่มเซิร์ฟเวอร์ 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สแกนหาซีเคร็ตที่ฝัง hardcoded
cycode_sca_scanสแกนเพื่อการวิเคราะห์องค์ประกอบซอฟต์แวร์ (SCA) - ช่องโหว่และปัญหาใบอนุญาต
cycode_iac_scanสแกนหาการกำหนดค่าผิดพลาดของ Infrastructure as Code (IaC)
cycode_sast_scanสแกนเพื่อการทดสอบความปลอดภัยของแอปพลิเคชันแบบสแตติก (SAST) - ข้อบกพร่องด้านคุณภาพโค้ดและความปลอดภัย
cycode_statusรับข้อมูลเวอร์ชัน Cycode CLI สถานะการตรวจสอบสิทธิ์ และการกำหนดค่า

เครื่องมือสแกนแต่ละตัวยอมรับโหมดอินพุตสองแบบที่แยกจากกัน:

  • paths (แนะนำ) — หนึ่งพาธหรือมากกว่าของไฟล์หรือไดเรกทอรีที่มีอยู่บนดิสก์ ไดเรกทอรีจะถูกสแกนแบบเรียกซ้ำ เอ็นจิน Cycode จัดการการค้นพบและกรองไฟล์ เช่นเดียวกับที่ cycode scan -t <type> path ./src ทำจาก CLI
  • files (ทางเลือกสำรอง) — พจนานุกรมที่แมปพาธไฟล์กับเนื้อหาทั้งหมดเป็นสตริง ใช้เฉพาะเมื่อไฟล์ไม่พร้อมใช้งานบนดิสก์ (เช่น การแก้ไขในหน่วยความจำที่ยังไม่ได้บันทึก)

[!TIP] ใช้ paths ทุกครั้งที่ทำได้ การส่งไฟล์ขนาดใหญ่ (เช่น package-lock.json) เป็นเนื้อหาแบบอินไลน์อาจเกินขีดจำกัดโทเค็นและทำให้ไคลเอนต์ AI ทำงานช้าลง ด้วย paths เอ็นจิน Cycode จะอ่านไฟล์โดยตรงจากดิสก์

เครื่องมือสแกนทั้งหมดส่งคืนออบเจกต์ JSON ที่รวมฟิลด์ "summary" พร้อมจำนวนการละเมิดที่มนุษย์อ่านได้ (เช่น "Cycode found 3 violations: 1 CRITICAL, 2 HIGH.") นอกเหนือจากอาร์เรย์ "detections" แบบเต็ม

ตัวอย่างการใช้งาน

ตัวอย่างคำสั่งพื้นฐาน

เริ่มเซิร์ฟเวอร์ MCP ด้วยการตั้งค่าเริ่มต้น (การขนส่ง stdio):

cycode mcp

เริ่มเซิร์ฟเวอร์ MCP ด้วยการขนส่ง stdio อย่างชัดเจน:

cycode mcp -t stdio

เริ่มเซิร์ฟเวอร์ MCP ด้วยการขนส่ง Server-Sent Events (SSE):

cycode mcp -t sse -p 8080

เริ่มเซิร์ฟเวอร์ MCP ด้วยการขนส่ง HTTP แบบสตรีมได้บนโฮสต์และพอร์ตที่กำหนดเอง:

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

เรียนรู้เพิ่มเติมเกี่ยวกับประเภทการขนส่ง MCP ได้ใน MCP Protocol Specification – Transports

ตัวอย่างการกำหนดค่า

การใช้ MCP กับ Cursor/VS Code/Claude Desktop/ฯลฯ (mcp.json)

[!NOTE] สำหรับสภาพแวดล้อม Cycode ใน EU ตรวจสอบให้แน่ใจว่าได้ตั้งค่า CYCODE_API_URL และ CYCODE_APP_URL ที่เหมาะสมในตัวแปรสภาพแวดล้อม (เช่น https://api.eu.cycode.com และ https://app.eu.cycode.com)

ทำตาม คู่มือนี้ เพื่อกำหนดค่าเซิร์ฟเวอร์ MCP ใน VS Code/GitHub Copilot ของคุณ โปรดทราบว่าใน settings.json มีออบเจกต์ mcp ที่มีออบเจกต์ย่อย servers ซ้อนอยู่ แทนที่จะเป็นออบเจกต์ 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 (Server-Sent Events):

{
  "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 (เริ่มเซิร์ฟเวอร์ก่อน จากนั้นกำหนดค่าไคลเอนต์):

# Start the MCP server in the background
cycode mcp -t sse -p 8000 &

# Configure in mcp.json
{
  "mcpServers": {
    "cycode": {
      "url": "http://127.0.0.1:8000/sse"
    }
  }
}

สำหรับ การขนส่ง HTTP แบบสตรีมได้:

# Start the MCP server in the background
cycode mcp -t streamable-http -H 127.0.0.2 -p 9000 &

# Configure in mcp.json
{
  "mcpServers": {
    "cycode": {
      "url": "http://127.0.0.2:9000/mcp"
    }
  }
}

การกำหนดค่าขั้นสูง

ใบรับรองที่กำหนดเองและการหมดเวลา (สภาพแวดล้อมพร็อกซี)

หากองค์กรของคุณใช้พร็อกซีขององค์กรหรือชุด CA ที่กำหนดเองสำหรับการตรวจสอบ HTTPS คุณต้องบอก Cycode CLI (และสแต็ก TLS ของ Python ที่เกี่ยวข้อง) ว่าจะค้นหาชุดใบรับรองที่เชื่อถือได้จากที่ใด คุณยังสามารถเพิ่มการหมดเวลาการเรียกเครื่องมือ MCP หากการสแกนถูกตัดให้สั้นลง

ตัวแปรสภาพแวดล้อมคำอธิบาย
REQUESTS_CA_BUNDLEพาธไปยังไฟล์ชุด CA ที่กำหนดเอง (.pem หรือ .crt) ใช้โดยไลบรารี requests สำหรับการเรียก HTTPS ทั้งหมดที่ทำโดย Cycode CLI
SSL_CERT_FILEพาธไปยังไฟล์ชุด CA ที่กำหนดเอง ใช้โดยโมดูล ssl ระดับต่ำของ Python ตั้งค่านี้ควบคู่กับ REQUESTS_CA_BUNDLE เพื่อความครอบคลุมเต็มรูปแบบ
MCP_TOOL_TIMEOUTการหมดเวลา (เป็นวินาที) ที่ไคลเอนต์ MCP เช่น Claude และ GitHub Copilot รอให้การเรียกเครื่องมือเสร็จสมบูรณ์ เพิ่มค่านี้หากการสแกนที่ใช้เวลานานถูกตัดออกก่อนที่จะเสร็จสิ้น

[!TIP] ตั้งค่าทั้ง REQUESTS_CA_BUNDLE และ SSL_CERT_FILE เป็นพาธชุด CA เดียวกัน REQUESTS_CA_BUNDLE ครอบคลุมเลเยอร์ HTTP; SSL_CERT_FILE ครอบคลุมเลเยอร์ TLS ระดับต่ำ การใช้เพียงตัวใดตัวหนึ่งอาจยังทำให้เกิดข้อผิดพลาดใบรับรองในบางสภาพแวดล้อม

ตัวอย่างการกำหนดค่า mcp.json พร้อมใบรับรองที่กำหนดเองและการหมดเวลาที่ยาวนานขึ้น:

{
  "mcpServers": {
    "cycode": {
      "command": "cycode",
      "args": ["mcp"],
      "env": {
        "REQUESTS_CA_BUNDLE": "/path/to/your/corporate-ca-bundle.pem",
        "SSL_CERT_FILE": "/path/to/your/corporate-ca-bundle.pem",
        "MCP_TOOL_TIMEOUT": "1800"
      }
    }
  }
}

[!NOTE] เซิร์ฟเวอร์ MCP ต้องการการตรวจสอบสิทธิ์ Cycode CLI ที่เหมาะสมจึงจะทำงานได้ ตรวจสอบให้แน่ใจว่าคุณได้ตรวจสอบสิทธิ์โดยใช้ cycode auth หรือกำหนดค่าข้อมูลประจำตัวของคุณก่อนเริ่มเซิร์ฟเวอร์ MCP

การอนุญาตเครื่องมือล่วงหน้าสำหรับ Subagents (Claude Code)

เมื่อ Claude Code มอบหมายงานให้กับ subagents พื้นหลัง (เช่น เพื่อรันการสแกนแบบขนาน) subagents เหล่านั้นไม่สามารถแสดงข้อความแจ้งสิทธิ์แบบโต้ตอบได้ หากเครื่องมือ Cycode ไม่ได้รับการอนุมัติล่วงหน้า การสแกนจะล้มเหลวอย่างเงียบๆ ในบริบทของ subagent

ในการอนุญาตเครื่องมือ Cycode MCP ล่วงหน้าเพื่อให้ทำงานได้ในทุกบริบทรวมถึง subagents ให้เพิ่มเครื่องมือเหล่านั้นลงในรายการ allowedTools ในการตั้งค่า Claude Code ของคุณ (~/.claude/settings.json):

{
  "allowedTools": [
    "mcp__cycode__cycode_secret_scan",
    "mcp__cycode__cycode_sca_scan",
    "mcp__cycode__cycode_iac_scan",
    "mcp__cycode__cycode_sast_scan",
    "mcp__cycode__cycode_status"
  ]
}

เมื่อเพิ่มแล้ว Claude Code จะไม่แจ้งขออนุมัติเมื่อมีการเรียกเครื่องมือเหล่านี้ และเครื่องมือเหล่านี้จะทำงานได้อย่างถูกต้องภายใน subagents

การแก้ไขปัญหา MCP

หากคุณพบปัญหากับเซิร์ฟเวอร์ MCP คุณสามารถเปิดใช้งานการบันทึกดีบักเพื่อรับข้อมูลรายละเอียดเพิ่มเติมเกี่ยวกับสิ่งที่เกิดขึ้น มีสองวิธีในการเปิดใช้งานการบันทึกดีบัก:

  1. ใช้แฟล็ก -v หรือ --verbose:
cycode -v mcp
  1. ใช้ตัวแปรสภาพแวดล้อม CYCODE_CLI_VERBOSE:
CYCODE_CLI_VERBOSE=1 cycode mcp

บันทึกดีบักจะแสดงข้อมูลรายละเอียดเกี่ยวกับ:

  • การเริ่มต้นและการกำหนดค่าเซิร์ฟเวอร์
  • ความพยายามและสถานะการเชื่อมต่อ
  • การดำเนินการและผลลัพธ์ของเครื่องมือ
  • ข้อผิดพลาดหรือคำเตือนใดๆ ที่เกิดขึ้น

ข้อมูลนี้มีประโยชน์เมื่อ:

  • วินิจฉัยปัญหาการเชื่อมต่อ
  • ทำความเข้าใจว่าเหตุใดเครื่องมือบางอย่างจึงไม่ทำงาน
  • ระบุปัญหาการตรวจสอบสิทธิ์
  • ดีบักปัญหาเฉพาะการขนส่ง

การกำหนดค่า MCP

คำสั่ง Platform [BETA]

[!WARNING] คำสั่ง platform อยู่ในช่วง เบต้า คำสั่ง อาร์กิวเมนต์ และรูปแบบผลลัพธ์ถูกสร้างขึ้นแบบไดนามิกจากข้อกำหนด API ของ Cycode และอาจเปลี่ยนแปลงระหว่างรุ่นโดยไม่ต้องแจ้งให้ทราบ อย่าพึ่งพาคำสั่งเหล่านี้ในระบบอัตโนมัติสำหรับการใช้งานจริง

คำสั่ง cycode platform เปิดเผย API การอ่านของแพลตฟอร์ม Cycode เป็นคำสั่ง CLI โดยจัดกลุ่มเอนด์พอยต์ตามทรัพยากร (เช่น projects, violations, workflows) และเปลี่ยนพารามิเตอร์ของแต่ละเอนด์พอยต์เป็นอาร์กิวเมนต์ CLI และแฟล็ก --option ที่มีชนิดข้อมูล

cycode platform projects list --page-size 50
cycode platform violations count
cycode platform workflows view <workflow-id>

ข้อกำหนด OpenAPI ถูกดึงมาจาก Cycode API เมื่อใช้งานครั้งแรกและถูกแคชที่ ~/.cycode/openapi-spec.json เป็นเวลา 24 ชั่วโมง คำสั่งที่ไม่เกี่ยวข้อง (cycode scan, cycode status, ฯลฯ) จะไม่ทริกเกอร์การดึงข้อมูล

[!NOTE] คุณต้องได้รับการตรวจสอบสิทธิ์ (cycode auth หรือตัวแปรสภาพแวดล้อม CYCODE_CLIENT_ID / CYCODE_CLIENT_SECRET) เพื่อให้ cycode platform ค้นพบและรันคำสั่ง คำสั่ง Cycode CLI อื่นๆ ทำงานได้โดยไม่ต้องตรวจสอบสิทธิ์

การค้นพบคำสั่ง

เนื่องจากคำสั่งถูกสร้างขึ้นจากข้อกำหนด แหล่งที่มาของความจริงสำหรับสิ่งที่มีอยู่คือ --help:

cycode platform --help                  # list all resource groups
cycode platform projects --help         # list actions on a resource
cycode platform projects list --help    # list options/arguments for an action

ตัวอย่าง Platform

# List projects with pagination
cycode platform projects list --page-size 25

# View a single project by ID
cycode platform projects view <project-id>

# Count violations across the tenant
cycode platform violations count

# Filter using query parameters (see `--help` for what each endpoint supports)
cycode platform violations list --severity CRITICAL

ผลลัพธ์ทั้งหมดเป็น JSON ตามค่าเริ่มต้น — ส่งผ่าน jq เพื่อการกรองเฉพาะกิจ:

cycode platform projects list --page-size 100 | jq '.items[].name'

หมายเหตุและข้อจำกัดของ Platform

  • อ่านอย่างเดียวในปัจจุบัน เฉพาะเอนด์พอยต์ GET เท่านั้นที่ถูกเปิดเผยในเบต้านี้
  • ขับเคลื่อนด้วยข้อกำหนด การเพิ่มเอนด์พอยต์ใหม่ลงใน API จะปรากฏขึ้นโดยอัตโนมัติในครั้งถัดไปที่แคชถูกรีเฟรช
  • ไม่มีข้อกำหนดที่รวมมา การเรียกใช้ cycode platform ครั้งแรกหลังการติดตั้ง (หรือหลังจากแคช 24 ชั่วโมงหมดอายุ) จะทำการดึงข้อมูลผ่านเครือข่าย สำหรับการเชื่อมต่อที่ช้า การเรียกครั้งแรกนี้อาจใช้เวลาสองสามวินาที; การเรียกครั้งต่อมาจะเกือบจะทันทีจนกว่าแคชจะหมดอายุ
  • แทนที่ TTL ของแคช ด้วย CYCODE_SPEC_CACHE_TTL=<seconds>

คำสั่ง Scan

การรันการสแกน

แอปพลิเคชัน Cycode CLI มีการสแกนหลายประเภทเพื่อให้คุณสามารถเลือกตัวเลือกที่เหมาะสมกับกรณีของคุณมากที่สุด ต่อไปนี้คือตัวเลือกและคำสั่งที่มีอยู่ในปัจจุบัน:

ตัวเลือกคำอธิบาย
-t, --scan-type [secret|iac|sca|sast]ระบุการสแกนที่คุณต้องการดำเนินการ (secret/iac/sca/sast) ค่าเริ่มต้นคือ secret
--show-secret BOOLEANแสดงซีเคร็ตเป็นข้อความธรรมดา ดูรายละเอียดเพิ่มเติมในส่วน แสดง/ซ่อนซีเคร็ต
--soft-fail BOOLEANรันการสแกนโดยไม่ทำให้ล้มเหลว จะส่งคืนรหัสสถานะที่ไม่ใช่ข้อผิดพลาดเสมอ ดูรายละเอียดเพิ่มเติมในส่วน Soft Fail
--severity-threshold [INFO|LOW|MEDIUM|HIGH|CRITICAL]แสดงเฉพาะการละเมิดที่ระดับที่ระบุหรือสูงกว่า
--sca-scanระบุการสแกน SCA ที่คุณต้องการดำเนินการ (package-vulnerabilities/license-compliance) ค่าเริ่มต้นคือทั้งสองอย่าง
--monitorเมื่อระบุ ผลการสแกนจะถูกบันทึกใน Cycode
--cycode-reportแสดงลิงก์ไปยังรายงานการสแกนในแพลตฟอร์ม Cycode ในเอาต์พุตคอนโซล
--no-restoreเมื่อระบุ Cycode จะไม่รันคำสั่ง restore การดำเนินการนี้จะสแกนเฉพาะ direct dependencies เท่านั้น!
--stop-on-errorยกเลิกการสแกนหากเกิดความล้มเหลวในการรวบรวมไฟล์หรือการ restore dependency ใดๆ แทนที่จะข้ามไฟล์ที่ล้มเหลวและดำเนินการต่อ
--gradle-all-sub-projectsรันคำสั่ง gradle restore สำหรับโปรเจกต์ย่อยทั้งหมด ควรเรียกใช้จาก
--maven-settings-fileสำหรับ Maven เท่านั้น อนุญาตให้ใช้ไฟล์ settings.xml แบบกำหนดเองเมื่อสแกนหา dependencies
--helpแสดงตัวเลือกสำหรับคำสั่งที่กำหนด
คำสั่งคำอธิบาย
commit-historyสแกนประวัติ commit หรือทำการสแกน diff ระหว่าง commit ที่ระบุ
pathสแกนไฟล์ในพาธที่ระบุในคำสั่ง
pre-commitใช้คำสั่งนี้เพื่อสแกนเนื้อหาที่ยังไม่ได้ commit
repositoryสแกน git repository รวมถึงประวัติของมัน

ตัวเลือก

ตัวเลือก Severity

เพื่อจำกัดผลลัพธ์ของการสแกนให้อยู่ที่เกณฑ์ความรุนแรงที่ระบุ สามารถเพิ่มอาร์กิวเมนต์ --severity-threshold ลงในคำสั่งสแกนได้

ตัวอย่างเช่น คำสั่งต่อไปนี้จะสแกน repository เพื่อหาการละเมิดนโยบายที่มีความรุนแรงระดับ Medium ขึ้นไป:

cycode scan --severity-threshold MEDIUM repository ~/home/git/codebase

ตัวเลือก Monitor

[!NOTE] ตัวเลือกนี้ใช้ได้เฉพาะกับการสแกน SCA เท่านั้น

เพื่อส่งผลการสแกนที่เชื่อมโยงกับ นโยบาย SCA ที่พบในการสแกนประเภท SCA ไปยัง Cycode ให้เพิ่มอาร์กิวเมนต์ --monitor ลงในคำสั่งสแกน

ตัวอย่างเช่น คำสั่งต่อไปนี้จะสแกน repository เพื่อหาการละเมิดนโยบาย SCA และส่งไปยังแพลตฟอร์ม Cycode:

cycode scan -t sca --monitor repository ~/home/git/codebase

ตัวเลือก Cycode Report

สำหรับทุกการสแกนที่ดำเนินการโดยใช้ Cycode CLI รายงานจะถูกสร้างขึ้นโดยอัตโนมัติและผลลัพธ์จะถูกส่งไปยัง Cycode ผลลัพธ์เหล่านี้จะเชื่อมโยงกับนโยบายที่เกี่ยวข้อง (เช่น นโยบาย SCA สำหรับการสแกน Repository) ภายในแพลตฟอร์ม Cycode

เพื่อให้ URL โดยตรงไปยังรายงาน Cycode นี้แสดงในเอาต์พุต CLI ของคุณหลังจากการสแกนเสร็จสิ้น ให้เพิ่มอาร์กิวเมนต์ --cycode-report ลงในคำสั่งสแกนของคุณ

cycode scan --cycode-report repository ~/home/git/codebase

ผลการสแกนทั้งหมดจาก CLI จะปรากฏในส่วน CLI Logs ของ Cycode หากคุณรวมแฟล็ก --cycode-report ไว้ในคำสั่งของคุณ ลิงก์โดยตรงไปยังรายงานที่ระบุจะแสดงในเทอร์มินัลของคุณหลังจากผลการสแกน

[!WARNING] คุณต้องมีบทบาท owner หรือ admin ใน Cycode เพื่อดูหน้านี้

cli-report

หน้ารายงานจะมีลักษณะดังตัวอย่างด้านล่าง:

ตัวเลือก Package Vulnerabilities

[!NOTE] ตัวเลือกนี้ใช้ได้เฉพาะกับการสแกน SCA เท่านั้น

เพื่อสแกนหาช่องโหว่ของแพ็คเกจเฉพาะใน local repository ของคุณ ให้เพิ่มอาร์กิวเมนต์ --sca-scan package-vulnerabilities ต่อจากตัวเลือก -t sca หรือ --scan-type sca

จากตัวอย่างก่อนหน้านี้ หากคุณต้องการรันเฉพาะการสแกน SCA สำหรับช่องโหว่ของแพ็คเกจ คุณสามารถดำเนินการดังต่อไปนี้:

cycode scan -t sca --sca-scan package-vulnerabilities repository ~/home/git/codebase

ตัวเลือก License Compliance

[!NOTE] ตัวเลือกนี้ใช้ได้เฉพาะกับการสแกน SCA เท่านั้น

เพื่อสแกน branch เฉพาะของ local repository ของคุณ ให้เพิ่มอาร์กิวเมนต์ --sca-scan license-compliance ตามด้วยชื่อของ branch ที่คุณต้องการสแกน

จากตัวอย่างก่อนหน้านี้ หากคุณต้องการสแกนเฉพาะ branch ที่ชื่อ dev คุณสามารถดำเนินการดังต่อไปนี้:

cycode scan -t sca --sca-scan license-compliance repository ~/home/git/codebase -b dev

ตัวเลือก Lock Restore

[!NOTE] ตัวเลือกนี้ใช้ได้เฉพาะกับการสแกน SCA เท่านั้น

เมื่อรันการสแกน SCA โดยค่าเริ่มต้น Cycode CLI จะพยายาม restore (สร้าง) dependency lockfile สำหรับแต่ละ manifest file ที่รองรับที่พบ การดำเนินการนี้ช่วยให้สามารถสแกน transitive dependencies ได้ ไม่ใช่แค่ที่ระบุไว้โดยตรงใน manifest หากต้องการข้ามขั้นตอนนี้และสแกนเฉพาะ direct dependencies ให้ใช้แฟล็ก --no-restore

ระบบนิเวศต่อไปนี้รองรับการ restore lockfile อัตโนมัติ:

ระบบนิเวศManifest fileLockfile ที่สร้างเครื่องมือที่เรียกใช้ (เมื่อไม่มี lockfile)
npmpackage.jsonpackage-lock.jsonnpm install --package-lock-only --ignore-scripts --no-audit
Yarnpackage.jsonyarn.lockyarn install --ignore-scripts
pnpmpackage.jsonpnpm-lock.yamlpnpm install --ignore-scripts
Denodeno.json / deno.jsoncdeno.lock(อ่านเฉพาะ lockfile ที่มีอยู่)
Gogo.modgo.mod.graphgo list -m -json all + go mod graph
Mavenpom.xmlbcde.mvndepsmvn dependency:tree
Gradlebuild.gradle / build.gradle.ktsgradle-dependencies-generated.txtgradle dependencies -q --console plain
SBTbuild.sbtbuild.sbt.locksbt dependencyLockWrite
NuGet*.csprojpackages.lock.jsondotnet restore --use-lock-file
RubyGemfileGemfile.lockbundle --quiet
Poetrypyproject.tomlpoetry.lockpoetry lock
PipenvPipfilePipfile.lockpipenv lock
PHP Composercomposer.jsoncomposer.lockcomposer update --no-cache --no-install --no-scripts --ignore-platform-reqs

หากมี lockfile อยู่แล้วควบคู่กับ manifest Cycode จะอ่านโดยตรงโดยไม่ต้องรันคำสั่ง install ใดๆ

ข้อกำหนดเบื้องต้นของ SBT: ต้องติดตั้งปลั๊กอิน sbt-dependency-lock เพิ่มบรรทัดต่อไปนี้ลงใน project/plugins.sbt:

addSbtPlugin("software.purpledragon" % "sbt-dependency-lock" % "1.5.1")

ตัวเลือก Stop on Error

ตามค่าเริ่มต้น Cycode จะสแกนต่อไปแม้ว่าจะไม่สามารถอ่านไฟล์ได้ (เช่น เนื่องจากข้อผิดพลาดด้านสิทธิ์) หรือไม่สามารถสร้าง dependency lockfile ได้ในระหว่างการสแกน SCA รายการที่ล้มเหลวจะถูกข้ามไปพร้อมคำเตือน และการสแกนจะดำเนินการต่อกับไฟล์ที่เหลือ

ใช้ --stop-on-error เพื่อเปลี่ยนลักษณะการทำงานนี้: การสแกนจะยกเลิกทันทีเมื่อเกิดความล้มเหลวครั้งแรกและรายงานข้อผิดพลาด

cycode scan -t sca --stop-on-error path ~/home/git/codebase

สิ่งนี้มีประโยชน์ใน CI pipeline ที่ความล้มเหลวแบบเงียบจะทำให้ได้ผลการสแกนที่ไม่สมบูรณ์ เมื่อ --stop-on-error ถูกทริกเกอร์ คุณสามารถแก้ไขปัญหาพื้นฐานหรือสำหรับความล้มเหลวในการ restore ของ SCA โดยเฉพาะ ให้เพิ่ม --no-restore เพื่อข้ามการสร้าง lockfile และสแกนเฉพาะ direct dependencies

เมื่อใช้ --stop-on-error CLI จะแยกความแตกต่างระหว่างข้อผิดพลาดในการสแกนและการละเมิดนโยบายผ่าน exit codes:

Exit codeความหมาย
0การสแกนเสร็จสมบูรณ์โดยไม่พบการละเมิด
1การสแกนเสร็จสมบูรณ์และพบการละเมิด
2การสแกนถูกยกเลิกเนื่องจากข้อผิดพลาด (เฉพาะเมื่อตั้งค่า --stop-on-error)

การสแกน Repository

การสแกน repository จะตรวจสอบ local repository ทั้งหมดเพื่อหาซีเคร็ตที่เปิดเผยหรือการกำหนดค่าที่ไม่ปลอดภัย การสแกนประเภทที่ครอบคลุมมากขึ้นนี้จะดูทุกอย่าง: สถานะปัจจุบันของ repository และประวัติ commit ของคุณ มันจะมองหาไม่เพียงแต่ซีเคร็ตที่เปิดเผยอยู่ในปัจจุบันภายใน repository แต่ยังรวมถึงซีเคร็ตที่ถูกลบไปก่อนหน้านี้ด้วย

เพื่อดำเนินการสแกน repository แบบเต็ม ให้ดำเนินการดังต่อไปนี้:

cycode scan repository {{path}}

ตัวอย่างเช่น หากคุณต้องการสแกน repository ที่เก็บไว้ใน ~/home/git/codebase คุณสามารถดำเนินการดังต่อไปนี้:

cycode scan repository ~/home/git/codebase

ตัวเลือกต่อไปนี้สามารถใช้ได้กับคำสั่งนี้:

ตัวเลือกคำอธิบาย
-b, --branch TEXTbranch ที่จะสแกน หากไม่ได้ตั้งค่าจะสแกน branch เริ่มต้น

ตัวเลือก Branch

เพื่อสแกน branch เฉพาะของ local repository ของคุณ ให้เพิ่มอาร์กิวเมนต์ -b (หรือ --branch) ตามด้วยชื่อของ branch ที่คุณต้องการสแกน

จากตัวอย่างก่อนหน้านี้ หากคุณต้องการสแกนเฉพาะ branch ที่ชื่อ dev คุณสามารถดำเนินการดังต่อไปนี้:

cycode scan repository ~/home/git/codebase -b dev

การสแกน Path

การสแกน path จะตรวจสอบไดเรกทอรีภายในเครื่องที่ระบุและเนื้อหาทั้งหมดภายในนั้น แทนที่จะมุ่งเน้นเฉพาะ GIT repository

เพื่อดำเนินการสแกนไดเรกทอรี ให้ดำเนินการดังต่อไปนี้:

cycode scan path {{path}}

ตัวอย่างเช่น พิจารณาสถานการณ์ที่คุณต้องการสแกนไดเรกทอรีที่อยู่ที่ ~/home/git/codebase คุณสามารถดำเนินการดังต่อไปนี้:

cycode scan path ~/home/git/codebase

การสแกน Terraform Plan

Cycode CLI รองรับการสแกน Terraform plan (รองรับ Terraform 0.12 ขึ้นไป)

ไฟล์ Terraform plan ต้องอยู่ในรูปแบบ JSON (มีนามสกุล .json)

หากคุณมีแค่ไฟล์ configuration คุณสามารถสร้าง plan ได้โดยทำดังต่อไปนี้:

  1. เริ่มต้นไดเรกทอรีการทำงานที่มีไฟล์ Terraform configuration:

    terraform init

  2. สร้าง Terraform execution plan และบันทึกเอาต์พุตไบนารี:

    terraform plan -out={tfplan_output}

  3. แปลงไฟล์เอาต์พุตไบนารีเป็น JSON ที่อ่านได้:

    terraform show -json {tfplan_output} > {tfplan}.json

  4. สแกน {tfplan}.json ของคุณด้วย Cycode CLI:

    cycode scan -t iac path ~/PATH/TO/YOUR/{tfplan}.json

การสแกน Commit History

[!NOTE] การสแกน Commit History ไม่สามารถใช้ได้กับการสแกน IaC

คำสั่งสแกน commit history มีความสามารถหลักสองประการ:

  1. การสแกนประวัติทั้งหมด: วิเคราะห์ commit ทั้งหมดในประวัติของ repository
  2. การสแกน Diff: สแกนเฉพาะการเปลี่ยนแปลงระหว่าง commit ที่ระบุ

การสแกนซีเคร็ตสามารถวิเคราะห์ commit ทั้งหมดในประวัติของ repository ได้ เนื่องจากซีเคร็ตที่ถูกนำเข้ามาและลบออกในภายหลังยังคงสามารถรั่วไหลหรือถูกเปิดเผยได้ สำหรับการสแกน SCA และ SAST คำสั่ง commit history จะมุ่งเน้นไปที่การสแกนความแตกต่าง/การเปลี่ยนแปลงระหว่าง commit ทำให้เหมาะสำหรับการรีวิว pull request และการสแกนแบบเพิ่มส่วน

การสแกน commit history จะตรวจสอบประวัติ commit ของ Git repository ของคุณ และสามารถใช้ได้ทั้งสำหรับการวิเคราะห์ประวัติที่ครอบคลุมและการสแกน diff เฉพาะการเปลี่ยนแปลงที่ระบุ

เพื่อดำเนินการสแกน commit history ให้ดำเนินการดังต่อไปนี้:

cycode scan commit-history {{path}}

ตัวอย่างเช่น พิจารณาสถานการณ์ที่คุณต้องการสแกนประวัติ commit สำหรับ repository ที่เก็บไว้ใน ~/home/git/codebase คุณสามารถดำเนินการดังต่อไปนี้:

cycode scan commit-history ~/home/git/codebase

ตัวเลือกต่อไปนี้สามารถใช้ได้กับคำสั่งนี้:

ตัวเลือกคำอธิบาย
-r, --commit-range TEXTสแกนช่วงคอมมิตในที่เก็บ git นี้ โดยค่าเริ่มต้น cycode จะสแกนประวัติคอมมิตทั้งหมด (ตัวอย่าง: HEAD~1)

ตัวเลือกช่วงคอมมิต (การสแกนแบบ Diff)

ตัวเลือกช่วงคอมมิตเปิดใช้งาน การสแกนแบบ diff – สแกนเฉพาะการเปลี่ยนแปลงระหว่างคอมมิตที่ระบุแทนที่จะเป็นประวัติที่เก็บทั้งหมด สิ่งนี้มีประโยชน์อย่างยิ่งสำหรับ:

  • การตรวจสอบคำขอดึง (Pull request): สแกนเฉพาะการเปลี่ยนแปลงที่นำเข้ามาใน PR
  • การสแกน CI/CD แบบเพิ่มส่วน: เน้นที่การเปลี่ยนแปลงล่าสุดแทนที่จะเป็นโค้ดเบสทั้งหมด
  • การตรวจสอบสาขาฟีเจอร์: เปรียบเทียบการเปลี่ยนแปลงกับสาขา main/master
  • การเพิ่มประสิทธิภาพ: สแกนเร็วขึ้นโดยจำกัดขอบเขตเฉพาะการเปลี่ยนแปลงที่เกี่ยวข้อง

ไวยากรณ์ช่วงคอมมิต

ตัวเลือก --commit-range (-r) รองรับไวยากรณ์การแก้ไข Git มาตรฐาน:

ไวยากรณ์คำอธิบายตัวอย่าง
commit1..commit2การเปลี่ยนแปลงจากคอมมิต1 ถึงคอมมิต2abc123..def456
commit1...commit2การเปลี่ยนแปลงในคอมมิต2 ที่ไม่อยู่ในคอมมิต1main...feature-branch
commitการเปลี่ยนแปลงจากคอมมิตถึง HEADHEAD~1
branch1..branch2การเปลี่ยนแปลงจากสาขา1 ถึงสาขา2main..feature-branch

ตัวอย่างการสแกนแบบ Diff

สแกนการเปลี่ยนแปลงในคอมมิตล่าสุด:

cycode scan commit-history -r HEAD~1 ~/home/git/codebase

สแกนการเปลี่ยนแปลงระหว่างสองคอมมิตที่ระบุ:

cycode scan commit-history -r abc123..def456 ~/home/git/codebase

สแกนการเปลี่ยนแปลงในสาขาฟีเจอร์ของคุณเปรียบเทียบกับ main:

cycode scan commit-history -r main..HEAD ~/home/git/codebase

สแกนการเปลี่ยนแปลงระหว่าง main และสาขาฟีเจอร์:

cycode scan commit-history -r main..feature-branch ~/home/git/codebase

สแกนการเปลี่ยนแปลงทั้งหมดใน 3 คอมมิตล่าสุด:

cycode scan commit-history -r HEAD~3..HEAD ~/home/git/codebase

[!TIP] สำหรับไปป์ไลน์ CI/CD คุณสามารถใช้ตัวแปรสภาพแวดล้อมเช่น ${{ github.event.pull_request.base.sha }}..${{ github.sha }} (GitHub Actions) หรือ $CI_MERGE_REQUEST_TARGET_BRANCH_SHA..$CI_COMMIT_SHA (GitLab CI) เพื่อสแกนเฉพาะการเปลี่ยนแปลงของ PR/MR

การสแกนก่อนคอมมิต

การสแกนก่อนคอมมิตจะระบุปัญหาใด ๆ โดยอัตโนมัติก่อนที่คุณจะคอมมิตการเปลี่ยนแปลงไปยังที่เก็บของคุณ ไม่จำเป็นต้องเรียกใช้การสแกนนี้ด้วยตนเอง กำหนดค่า hook ก่อนคอมมิตตามรายละเอียดในส่วนการติดตั้งของคู่มือนี้

หลังจากติดตั้ง hook ก่อนคอมมิตแล้ว คุณอาจต้องการข้ามการสแกนในบางครั้งระหว่างการคอมมิตเฉพาะ เมื่อต้องการทำเช่นนี้ ให้เพิ่มสิ่งต่อไปนี้ลงในคำสั่ง git ของคุณเพื่อข้ามการสแกนสำหรับคอมมิตเดียว:

SKIP=cycode git commit -m <your commit message>`

การสแกนก่อนพุช

การสแกนก่อนพุชจะระบุปัญหาใด ๆ โดยอัตโนมัติก่อนที่คุณจะพุชการเปลี่ยนแปลงไปยังที่เก็บระยะไกล hook นี้ทำงานบนฝั่งไคลเอ็นต์และสแกนเฉพาะคอมมิตที่กำลังจะถูกพุช ทำให้มีประสิทธิภาพในการตรวจจับปัญหาก่อนที่จะไปถึงที่เก็บระยะไกล

[!NOTE] hook ก่อนพุชไม่พร้อมใช้งานสำหรับการสแกน IaC

hook ก่อนพุชทำงานร่วมกับเฟรมเวิร์ก pre-commit และสามารถกำหนดค่าให้ทำงานก่อนการดำเนินการ git push ใด ๆ

การติดตั้ง Hook ก่อนพุช

เพื่อตั้งค่า hook ก่อนพุชโดยใช้เฟรมเวิร์ก pre-commit:

  1. ติดตั้งเฟรมเวิร์ก pre-commit (หากยังไม่ได้ติดตั้ง):

    pip3 install pre-commit
    
  2. สร้างหรืออัปเดตไฟล์ .pre-commit-config.yaml ของคุณเพื่อรวม hook ก่อนพุช:

    repos:
      - repo: https://github.com/cycodehq/cycode-cli
        rev: v3.5.0
        hooks:
          - id: cycode-pre-push
            stages: [pre-push]
    
  3. สำหรับประเภทการสแกนหลายประเภท ใช้การกำหนดค่านี้:

    repos:
      - repo: https://github.com/cycodehq/cycode-cli
        rev: v3.5.0
        hooks:
          - id: cycode-pre-push          # Secrets scan
            stages: [pre-push]
          - id: cycode-sca-pre-push      # SCA scan
            stages: [pre-push]
          - id: cycode-sast-pre-push     # SAST scan
            stages: [pre-push]
    
  4. ติดตั้ง hook ก่อนพุช:

    pre-commit install --hook-type pre-push
    

    การติดตั้งที่สำเร็จจะแสดงข้อความ: Pre-push installed at .git/hooks/pre-push

  5. อัปเดต hook ก่อนพุชให้ทันสมัยอยู่เสมอ:

    pre-commit autoupdate
    

วิธีการทำงานของการสแกนก่อนพุช

hook ก่อนพุช:

  • รับข้อมูลเกี่ยวกับคอมมิตที่กำลังถูกพุช
  • คำนวณช่วงคอมมิตที่เหมาะสมในการสแกน
  • สำหรับสาขาใหม่: สแกนคอมมิตทั้งหมดจากฐานการผสานกับสาขาเริ่มต้น
  • สำหรับสาขาที่มีอยู่: สแกนเฉพาะคอมมิตใหม่ตั้งแต่การพุชครั้งล่าสุด
  • เรียกใช้การสแกนที่ครอบคลุมเช่นเดียวกับโหมดการสแกน Cycode อื่น ๆ

การตรวจจับสาขาเริ่มต้นอัจฉริยะ

hook ก่อนพุชตรวจจับสาขาเริ่มต้นสำหรับการคำนวณฐานการผสานอย่างชาญฉลาดโดยใช้ลำดับความสำคัญนี้:

  1. ตัวแปรสภาพแวดล้อม: CYCODE_DEFAULT_BRANCH - อนุญาตให้เขียนทับด้วยตนเอง
  2. Git Remote HEAD: ใช้ git symbolic-ref refs/remotes/origin/HEAD เพื่อตรวจจับสาขาเริ่มต้นระยะไกลจริง
  3. ข้อมูล Git Remote: ถอยกลับไปใช้ git remote show origin หาก symbolic-ref ล้มเหลว
  4. ทางเลือกสำรองแบบฮาร์ดโค้ด: ใช้ชื่อสาขาเริ่มต้นทั่วไป (origin/main, origin/master, main, master)

การตั้งค่าสาขาเริ่มต้นแบบกำหนดเอง:

export CYCODE_DEFAULT_BRANCH=origin/develop

การตรวจจับอัจฉริยะนี้ช่วยให้มั่นใจว่า hook ก่อนพุชทำงานได้อย่างถูกต้องไม่ว่าที่เก็บของคุณจะใช้ main, master, develop หรือชื่อสาขาเริ่มต้นอื่น ๆ

การข้ามการสแกนก่อนพุช

เพื่อข้ามการสแกนก่อนพุชสำหรับการดำเนินการพุชเฉพาะ ใช้:

SKIP=cycode-pre-push git push

หรือเพื่อข้าม hook ก่อนพุชทั้งหมด:

git push --no-verify

[!TIP] hook ก่อนพุชถูกทริกเกอร์เมื่อใช้คำสั่ง git push และสแกนเฉพาะคอมมิตที่กำลังจะถูกพุช ทำให้มีประสิทธิภาพมากกว่าการสแกนที่เก็บทั้งหมด

ยกเว้นพาธจากการสแกน

คุณสามารถใช้ไฟล์ .cycodeignore เพื่อบอก Cycode CLI ว่าไฟล์และไดเรกทอรีใดที่จะยกเว้นจากการสแกน มันทำงานเหมือนกับไฟล์ .gitignore สิ่งนี้ช่วยให้คุณโฟกัสการสแกนไปที่โค้ดที่เกี่ยวข้องและป้องกันไม่ให้บางพาธทริกเกอร์การละเมิดในเครื่อง

วิธีการทำงาน

  1. สร้างไฟล์ชื่อ .cycodeignore ในโฟลเดอร์ทำงานของคุณ
  2. แสดงรายการไฟล์และไดเรกทอรีที่คุณต้องการยกเว้น โดยใช้รูปแบบเดียวกับ .gitignore
  3. วางไฟล์นี้ในไดเรกทอรีที่คุณวางแผนจะรันคำสั่ง cycode scan

[!WARNING]

  • ไฟล์ที่ไม่ถูกต้อง: หากไฟล์ .cycodeignore มีข้อผิดพลาดทางไวยากรณ์ การสแกน CLI จะล้มเหลวและส่งกลับข้อผิดพลาด
  • การละเว้นพาธ vs. การละเมิด: ไฟล์นี้ใช้สำหรับการยกเว้นพาธ ซึ่งแตกต่างจากความสามารถของ CLI ในการละเว้นการละเมิดเฉพาะ (ตัวอย่างเช่น โดยใช้แฟล็ก --ignore-violation)

สแกนเนอร์ที่รองรับ

  • SAST
  • IaC (เร็ว ๆ นี้)
  • SCA (เร็ว ๆ นี้)

ผลการสแกน

การสแกนแต่ละครั้งจะเสร็จสิ้นด้วยข้อความที่ระบุว่าพบปัญหาใด ๆ หรือไม่

หากไม่พบปัญหา การสแกนจะสิ้นสุดด้วยข้อความสำเร็จต่อไปนี้:

Good job! No issues were found!!! 👏👏👏

หากพบปัญหา การ์ดการละเมิดจะปรากฏขึ้นเมื่อเสร็จสิ้นแทน ในกรณีนี้คุณควรตรวจสอบไฟล์ที่มีปัญหาสำหรับบรรทัดเฉพาะที่ถูกเน้นโดยข้อความผลลัพธ์ ดำเนินการเปลี่ยนแปลงใด ๆ ที่จำเป็นเพื่อแก้ไขปัญหา จากนั้นดำเนินการสแกนอีกครั้ง

แสดง/ซ่อนความลับ

ใน ตัวอย่างด้านล่าง พบความลับในไฟล์ secret_test ซึ่งอยู่ในโฟลเดอร์ย่อย cli ส่วนที่สองของข้อความแสดงบรรทัดเฉพาะที่ความลับปรากฏ ซึ่งในกรณีนี้คือค่าที่กำหนดให้กับ 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 คุณจะเห็นฟิลด์สำหรับ "แนวทางของบริษัท" ที่มีแนวทางการแก้ไขที่คุณเพิ่มไว้ โปรดทราบว่าหากคุณไม่ได้เพิ่มแนวทางของบริษัทใด ๆ ฟิลด์นี้จะไม่ปรากฏในเครื่องมือ CLI

การละเว้นผลการสแกน

สามารถเพิ่มกฎการละเว้นเพื่อละเว้นค่าความลับเฉพาะ ค่า SHA512 เฉพาะ พาธเฉพาะ และรหัสกฎความลับและ IaC ของ Cycode เฉพาะ ซึ่งจะทำให้การสแกนไม่แจ้งเตือนค่าเหล่านี้ กฎการละเว้นถูกเขียนและบันทึกในเครื่องในไฟล์ ./.cycode/config.yaml

[!WARNING] การเพิ่มค่าที่จะละเว้นควรทำด้วยการพิจารณาอย่างรอบคอบถึงค่า พาธ และนโยบาย เพื่อให้แน่ใจว่าการสแกนจะตรวจจับผลบวกจริง

ต่อไปนี้คือตัวเลือกที่มีให้สำหรับคำสั่ง cycode ignore:

ตัวเลือกคำอธิบาย
--by-value TEXTละเว้นค่าเฉพาะขณะสแกนหาความลับ ดู การละเว้นค่าความลับ สำหรับรายละเอียดเพิ่มเติม
--by-sha TEXTละเว้นการแสดง SHA512 เฉพาะของสตริงขณะสแกนหาความลับ ดู การละเว้นค่า SHA ของความลับ สำหรับรายละเอียดเพิ่มเติม
--by-path TEXTหลีกเลี่ยงการสแกนพาธเฉพาะ จำเป็นต้องระบุประเภทการสแกน ดู การละเว้นพาธ สำหรับรายละเอียดเพิ่มเติม
--by-rule TEXTละเว้นการสแกนรหัสกฎความลับเฉพาะ/รหัสกฎ IaC/รหัสกฎ SCA ดู การละเว้นกฎความลับหรือ IaC สำหรับรายละเอียดเพิ่มเติม
--by-package TEXTละเว้นการสแกนเวอร์ชันแพ็คเกจเฉพาะขณะรันการสแกน SCA รูปแบบที่คาดหวัง - name@version ดู การละเว้นแพ็คเกจ สำหรับรายละเอียดเพิ่มเติม
--by-cve TEXTละเว้นการสแกน CVE เฉพาะขณะรันการสแกน SCA รูปแบบที่คาดหวัง: 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 กฎที่คุณต้องการละเว้น

ในตัวอย่างที่อยู่ด้านบนของส่วนนี้ คำสั่งเพื่อละเว้น ID กฎ IaC ที่เฉพาะเจาะจงมีดังนี้:

cycode ignore -t iac --by-rule bdaa88e2-5e7c-46ff-ac2a-29721418c59c

ในตัวอย่างข้างต้น ให้แทนที่ค่า bdaa88e2-5e7c-46ff-ac2a-29721418c59c ด้วย ID กฎที่คุณต้องการละเว้น

ในตัวอย่างที่อยู่ด้านบนของส่วนนี้ คำสั่งเพื่อละเว้น ID กฎ SCA ที่เฉพาะเจาะจงมีดังนี้:

cycode ignore -t sca --by-rule dc21bc6b-9f4f-46fb-9f92-e4327ea03f6b

ในตัวอย่างข้างต้น ให้แทนที่ค่า dc21bc6b-9f4f-46fb-9f92-e4327ea03f6b ด้วย ID กฎที่คุณต้องการละเว้น

การละเว้นแพ็คเกจ

[!NOTE] ตัวเลือกนี้ใช้ได้เฉพาะกับการสแกน 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 [email protected]

ในตัวอย่างข้างต้น ให้แทนที่ pyyaml ด้วยชื่อแพ็คเกจ และ 5.3.1 ด้วยเวอร์ชันของแพ็คเกจที่คุณต้องการละเว้น

การละเว้นผ่านไฟล์กำหนดค่า

กฎการละเว้นที่ใช้จะถูกจัดเก็บในไฟล์กำหนดค่าที่เรียกว่า config.yaml ไฟล์นี้สามารถแชร์ระหว่างนักพัฒนาได้อย่างง่ายดาย หรือแม้แต่คอมมิตไปยัง Git ระยะไกล ไฟล์เหล่านี้จะอยู่ในโฟลเดอร์ .cycode เสมอ โฟลเดอร์นี้ขึ้นต้นด้วยจุด (.) และคุณควรเปิดใช้งานการแสดงไฟล์ที่ซ่อนอยู่เพื่อดู

พาธของไฟล์กำหนดค่า

ตามค่าเริ่มต้น คำสั่ง cycode ignore ทั้งหมดจะบันทึกกฎการละเว้นไปยังไดเรกทอรีปัจจุบันที่ CLI ถูกเรียกใช้

ตัวอย่าง: การเรียกใช้คำสั่ง CLI การละเว้นจาก /Users/name/projects/backend จะสร้าง config.yaml ใน /Users/name/projects/backend/.cycode

➜  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 โดยที่ ~ หมายถึง users home directory, for example, /Users/name` บน macOS

การบันทึกไปยังพื้นที่ส่วนกลางสามารถทำได้ด้วยแฟล็ก -g ของคำสั่ง cycode ignore ตัวอย่างเช่น: 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

[!WARNING] ค่าสำหรับ "ละเว้นตามค่า" จะไม่ถูกจัดเก็บเป็นข้อความธรรมดา! CLI จะจัดเก็บแฮช sha256 ของค่าแทน คุณควรใส่แฮชของสตริงเมื่อแก้ไขไฟล์กำหนดค่าด้วยตนเอง

ตัวอย่างของ config.yaml จริง:

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

คำสั่งรายงาน

การสร้างรายงาน SBOM

รายการส่วนประกอบซอฟต์แวร์ (SBOM) คือรายการสินค้าคงคลังของส่วนประกอบทั้งหมดและการพึ่งพาซอฟต์แวร์ที่เกี่ยวข้องในการพัฒนาและส่งมอบแอปพลิเคชัน การใช้คำสั่งนี้ คุณสามารถสร้างรายงาน SBOM สำหรับโปรเจกต์ในเครื่องของคุณ หรือสำหรับ URI ของที่เก็บของคุณ

ตัวเลือกต่อไปนี้พร้อมใช้งานสำหรับคำสั่งนี้:

ตัวเลือกคำอธิบายจำเป็นค่าเริ่มต้น
-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สร้างรายงาน SBOM สำหรับ URI ของที่เก็บที่ระบุในคำสั่ง

ที่เก็บ

ในการสร้างรายงาน SBOM สำหรับ URI ของที่เก็บ:
cycode report sbom --format <sbom format> --include-vulnerabilities --include-dev-dependencies --output-file </path/to/file> repository_url <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 <sbom format> --include-vulnerabilities --include-dev-dependencies --output-file </path/to/file> path </path/to/project>

ตัวอย่างเช่น:
cycode report sbom --format spdx-2.3 --include-vulnerabilities --include-dev-dependencies path /path/to/local/project

คำสั่งย่อย path รองรับตัวเลือกเพิ่มเติมต่อไปนี้:

ตัวเลือกคำอธิบาย
--no-restoreข้ามการกู้คืนไฟล์ล็อกและสแกนเฉพาะการพึ่งพาโดยตรง ดู ตัวเลือกการกู้คืนล็อก สำหรับรายละเอียด
--gradle-all-sub-projectsเรียกใช้คำสั่งกู้คืน Gradle สำหรับโปรเจกต์ย่อยทั้งหมด (ใช้จากรากของบิลด์ Gradle หลายโปรเจกต์)
--maven-settings-fileสำหรับ Maven เท่านั้น อนุญาตให้ใช้ไฟล์ settings.xml แบบกำหนดเองเมื่อสร้างแผนผังการพึ่งพา

คำสั่งนำเข้า

การนำเข้า SBOM

รายการส่วนประกอบซอฟต์แวร์ (SBOM) คือรายการสินค้าคงคลังของส่วนประกอบทั้งหมดและการพึ่งพาซอฟต์แวร์ที่เกี่ยวข้องในการพัฒนาและส่งมอบแอปพลิเคชัน การใช้คำสั่งนี้ คุณสามารถนำเข้าไฟล์ SBOM จากระบบไฟล์ของคุณเข้าสู่ Cycode

ตัวเลือกต่อไปนี้พร้อมใช้งานสำหรับคำสั่งนี้:

ตัวเลือกคำอธิบายจำเป็นค่าเริ่มต้น
-n, --name TEXTชื่อที่แสดงของ SBOMใช่
-v, --vendor TEXTชื่อของเอนทิตีที่ให้ SBOMใช่
-l, --label TEXTแนบป้ายกำกับไปยัง SBOMไม่
-o, --owner TEXTที่อยู่อีเมลของผู้ใช้ Cycode ที่ทำหน้าที่เป็นจุดติดต่อสำหรับ SBOM นี้ไม่
-b, --business-impact [High | Medium | Low]ผลกระทบทางธุรกิจไม่ปานกลาง

ตัวอย่างเช่น:
cycode import sbom --name example-sbom --vendor cycode -label tag1 -label tag2 --owner [email protected] /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