تخطَّ إلى المحتوى

🔐 شرح أمن API وقواعد البيانات

إدارة الثغرات والتحديثات

الدرس 18 من 25· ⏱ 4 دقائق قراءة

ما هي إدارة الثغرات؟

إدارة الثغرات (Vulnerability Management) هي عملية مستمرة لاكتشاف وتقييم وإصلاح الثغرات الأمنية في التطبيق وتبعياته.

دورة حياة إدارة الثغرات:
  اكتشاف --> تقييم --> معالجة --> التحقق --> توثيق
    ↑                                       |
    └───────────────────────────────────────┘

فحص التبعيات (Dependency Scanning)

npm audit

# فحص التبعيات في مشروع Node.js
npm audit

# إصلاح التبعيات تلقائياً
npm audit fix

# إصلاح التغييرات الجوهرية فقط
npm audit fix --force

# عرض JSON مفصل للتقرير
npm audit --json > audit-report.json

Yarn

# فحص التبعيات في Yarn
yarn audit

# تصدير التقرير
yarn audit --json > yarn-audit.json

Dependabot

GitHub Dependabot يفحص التبعيات تلقائياً وينشئ Pull Requests للتحديثات:

# .github/dependabot.yml
version: 2
updates:
  # npm dependencies
  - package-ecosystem: "npm"
    directory: "/"
    schedule:
      interval: "weekly"
      day: "monday"
      time: "09:00"
      timezone: "Asia/Riyadh"
    open-pull-requests-limit: 10
    labels:
      - "dependencies"
      - "security"
    reviewers:
      - "team-security"
    assignees:
      - "security-lead"
    # عدم تحديث devDependencies دفعة واحدة
    allow:
      - dependency-type: "production"
    # تجاهل بعض الحزم
    ignore:
      - dependency-name: "express"
        versions: [">=5.x"]

  # Docker dependencies
  - package-ecosystem: "docker"
    directory: "/"
    schedule:
      interval: "weekly"

  # GitHub Actions
  - package-ecosystem: "github-actions"
    directory: "/"
    schedule:
      interval: "weekly"

مراجعة Dependabot PRs

// مثال: Auto-merge للـ patches فقط
// يمكن استخدام GitHub Actions لدمج التحديثات الآمنة تلقائياً
name: Auto-merge Dependabot
on: pull_request

permissions:
  contents: write
  pull-requests: write

jobs:
  auto-merge:
    if: ${{ github.actor == 'dependabot[bot]' }}
    runs-on: ubuntu-latest
    steps:
      - name: Enable auto-merge for Dependabot PRs
        run: gh pr merge --auto --squash "$PR_URL"
        env:
          PR_URL: ${{ github.event.pull_request.html_url }}
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

Snyk

أداة متقدمة لفحص الثغرات مع لوحة تحكم:

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

# المصادقة
snyk auth

# فحص المشروع
snyk test

# فحص Docker image
snyk container test node:18-alpine

# فحص مستمر (Monitor)
snyk monitor

# فحص في CI/CD (يفشل البناء إذا كان هناك ثغرات حرجة)
snyk test --severity-threshold=high

دمج Snyk مع GitHub Actions

name: Snyk Security Scan
on: [push, pull_request]
jobs:
  security:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - uses: snyk/actions/node@master
        env:
          SNYK_TOKEN: ${{ secrets.SNYK_TOKEN }}
        with:
          args: --severity-threshold=high

Software Composition Analysis (SCA)

SCA تحلل كل المكونات مفتوحة المصدر في تطبيقك:

// مثال: برنامج SCA بسيط
const fs = require('fs');
const https = require('https');

async function checkDependencies(packageJson) {
  const deps = {
    ...packageJson.dependencies,
    ...packageJson.devDependencies,
  };

  for (const [name, version] of Object.entries(deps)) {
    const cleanVersion = version.replace('^', '').replace('~', '');
    const cves = await checkNVD(name, cleanVersion);

    if (cves.length > 0) {
      console.log(`⚠️ ${name}@${cleanVersion}: ${cves.length} CVEs`);
      cves.forEach(cve => console.log(`   - ${cve.id}: ${cve.severity}`));
    }
  }
}

// استعلام NVD (National Vulnerability Database)
async function checkNVD(packageName, version) {
  const url = `https://services.nvd.nist.gov/rest/json/cves/2.0` +
    `?keywordSearch=${packageName} ${version}&resultsPerPage=20`;
  // تنفيذ الاستعلام...
}

إدارة التصحيحات (Patch Management)

استراتيجية التحديثات

# استراتيجية التحديثات
تبعيات المصادقة والحماية:
  - تحديث فوري (خلال 24 ساعة)
  - أولوية P0
  - Auto-merge للتصحيحات الأمنية

تبعيات أساسية (Express, PostgreSQL driver):
  - تحديث خلال 7 أيام
  - أولوية P1
  - مراجعة يدوية للـ Changelog

تبعيات ثانوية (Lodash, Date libraries):
  - تحديث شهري
  - أولوية P2
  - دمج مع التحديثات الدورية

CI/CD Pipeline مع فحص أمني

# .github/workflows/security.yml
name: Security Checks
on:
  push:
    branches: [main, develop]
  pull_request:
  schedule:
    - cron: '0 6 * * 1' # كل أسبوع

jobs:
  dependency-scan:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3

      - name: npm audit
        run: |
          npm audit --audit-level=high
          # exit 1 إذا كان هناك ثغرات عالية

      - name: Snyk scan
        uses: snyk/actions/node@master
        env:
          SNYK_TOKEN: ${{ secrets.SNYK_TOKEN }}
        with:
          args: --severity-threshold=high
        continue-on-error: true # لا يمنع الدمج لكن ينبه

      - name: SAST scan
        uses: github/codeql-action/analyze@v2

      - name: Dependency review
        uses: actions/dependency-review-action@v3

مراقبة CVEs (Common Vulnerabilities and Exposures)

// خدمة مراقبة CVEs
const CVE_FEEDS = [
  'https://nvd.nist.gov/feeds/json/cve/1.1/nvdcve-1.1-recent.json',
  'https://raw.githubusercontent.com/advisories/ghsa-advisories.json',
];

async function monitorCVEs() {
  for (const feed of CVE_FEEDS) {
    const cves = await fetch(feed).then(r => r.json());

    for (const cve of cves.CVE_Items) {
      if (cve.impact.baseMetricV3?.cvssV3?.baseScore >= 7.0) {
        const affected = await checkIfAffected(cve);
        if (affected) {
          await notifyTeam({
            severity: cve.impact.baseMetricV3.cvssV3.baseSeverity,
            cve: cve.cve.CVE_data_meta.ID,
            description: cve.cve.description.description_data[0].value,
            affectedPackages: affected,
          });
        }
      }
    }
  }
}

أفضل ممارسات إدارة الثغرات

  • افحص التبعيات في كل commit (npm audit, Snyk)
  • استخدم Dependabot أو Renovate للتحديثات التلقائية
  • طبق SCA (Software Composition Analysis) في CI/CD
  • راقب CVEs خاصة بـ NVD و GitHub Advisory Database
  • استخدم Lock Files (package-lock.json, yarn.lock) لتثبيت الإصدارات
  • طبق سياسة تحديثات واضحة (متى يتم التحديث فوراً ومتى ينتظر)
  • اختبر التحديثات قبل النشر (Staging Environment)
  • وثق تاريخ التحديثات لأغراض التدقيق

⚠️ 80% من الثغرات في التطبيقات تأتي من التبعيات الخارجية (التقارير: Snyk, 2023). تجاهل تحديث التبعيات هو أسوأ خطأ أمني يمكن ارتكابه.

🎯 التالي: رؤوس الأمان وتطبيق CSP

شرح إدارة الثغرات والتحديثات — أمن API وقواعد البيانات بالعربي
إدارة الثغرات والتحديثاتأمن API وقواعد البيانات بالعربي · The Code Fix

هل كان هذا الدرس مفيدًا؟