أمان التبعيات والحاويات

Snyk: فحص التبعيات في CI/CD

3 دقيقة للقراءة

Snyk هي أداة SCA الأكثر تبنياً، معروفة بتجربة المطور وقاعدة بيانات الثغرات الشاملة.

نظرة عامة على Snyk

الميزة الوصف
اللغات JavaScript، Python، Java، Go، Ruby، .NET، PHP، Scala
مديرو الحزم npm، pip، Maven، Gradle، Go modules، Bundler، NuGet
CI/CD GitHub، GitLab، Bitbucket، Jenkins، Azure DevOps
المستوى المجاني 200 اختبار/شهر للمشاريع مفتوحة المصدر

التثبيت

# تثبيت Snyk CLI
npm install -g snyk

# أو عبر Homebrew
brew install snyk

# المصادقة (ينشئ ~/.config/configstore/snyk.json)
snyk auth

الاستخدام الأساسي

# اختبار الدليل الحالي
snyk test

# اختبار بيان محدد
snyk test --file=package.json

# اختبار مع عتبة الخطورة
snyk test --severity-threshold=high

# الإخراج بـ JSON لمعالجة CI
snyk test --json > snyk-results.json

فهم مخرجات Snyk

Testing /app...

✗ High severity vulnerability found in lodash
  Description: Prototype Pollution
  Info: https://snyk.io/vuln/SNYK-JS-LODASH-567746
  Introduced through: express@4.17.1 > lodash@4.17.15
  From: express@4.17.1 > lodash@4.17.15
  Fixed in: lodash@4.17.21
  Remediation: Upgrade to lodash@4.17.21

Organization: your-org
Package manager: npm
Target file: package.json
Project name: my-app
Tested 156 dependencies for known vulnerabilities
Found 3 vulnerabilities (1 high, 2 medium)

تكامل CI/CD

GitHub Actions

# .github/workflows/snyk.yml
name: Snyk Security Scan

on:
  push:
    branches: [main]
  pull_request:

jobs:
  snyk:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      - name: Run Snyk to check for vulnerabilities
        uses: snyk/actions/node@master
        env:
          SNYK_TOKEN: ${{ secrets.SNYK_TOKEN }}
        with:
          args: --severity-threshold=high

      - name: Upload Snyk results to GitHub
        uses: github/codeql-action/upload-sarif@v3
        with:
          sarif_file: snyk.sarif

GitLab CI

# .gitlab-ci.yml
snyk:
  image: snyk/snyk:node
  stage: test
  script:
    - snyk auth $SNYK_TOKEN
    - snyk test --severity-threshold=high
  allow_failure: false

مراقبة التبعيات

ما وراء الفحوصات لمرة واحدة، Snyk يراقب الثغرات الجديدة:

# إضافة المشروع لمراقبة Snyk
snyk monitor

# المراقبة مع اسم مشروع مخصص
snyk monitor --project-name="production-api"

# مراقبة منظمة محددة
snyk monitor --org=my-team

PRs الإصلاح الآلي

Snyk يمكنه إنشاء طلبات سحب تلقائياً لإصلاح الثغرات:

# إعدادات تكامل Snyk GitHub
auto_remediation:
  enabled: true
  strategy: patch  # أو 'upgrade'
  branch_prefix: snyk-fix/

هذا ينشئ PRs مثل:

  • snyk-fix/upgrade-lodash-4.17.21
  • snyk-fix/patch-SNYK-JS-LODASH-567746

تجاهل الإيجابيات الخاطئة

# تجاهل ثغرة محددة
snyk ignore --id=SNYK-JS-LODASH-567746 --reason="غير قابل للاستغلال في سياقنا"

# ينشئ ملف سياسة .snyk
# .snyk
version: v1.25.0
ignore:
  SNYK-JS-LODASH-567746:
    - '*':
        reason: غير قابل للاستغلال - المدخلات معقمة
        expires: 2025-06-01T00:00:00.000Z

امتثال الرخص

Snyk أيضاً يتحقق من مشاكل الرخص:

# التحقق من الرخص
snyk test --show-vulnerable-paths=all

# الفشل على رخص محددة
snyk test --license-policy="high-risk-licenses"
الرخصة مستوى المخاطر السياسة الشائعة
MIT منخفض السماح
Apache-2.0 منخفض السماح
GPL-3.0 عالي الحظر (فيروسي)
AGPL-3.0 حرج الحظر
تجاري متفاوت المراجعة

بعد ذلك، سنستكشف أمان الحاويات مع Trivy. :::

اختبار

اختبار الوحدة 3: أمان التبعيات والحاويات

خذ الاختبار