دپندابات در گیت هاب (GitHub Dependabot) سرویسی است که به‌طور خودکار وابستگی‌های پروژه را پایش می‌کند، درباره‌ی آسیب‌پذیری‌ها هشدار می‌دهد و در صورت پیکربندی، Pull Requestهایی برای به‌روزرسانی آن‌ها ایجاد می‌کند. در دنیای نرم‌افزار مدرن، پروژه‌ها به‌طور میانگین به ده‌ها یا صدها وابستگی مستقیم و غیرمستقیم متکی هستند؛ هر یک از این وابستگی‌ها می‌تواند نقطه‌ی ورود یک آسیب‌پذیری باشد. همین واقعیت، مفهوم زنجیره‌ی تأمین نرم‌افزار (Software Supply Chain) را به یکی از مباحث کلیدی امنیت تبدیل کرده است. اگر با اصول امنیت وب آشنایی ندارید، مطالعه‌ی اصول امنیت وب نقطه‌ی شروع مناسبی است. در این نوشتار، از معماری داخلی دپندابات تا پیکربندی حرفه‌ای، مدیریت آسیب‌پذیری‌ها و رفع خطاهای رایج، مسیر کامل را با تمرکز بر مهندسی ترسیم می‌کنم.

دپندابات چیست

دپندابات یک سرویس خودکار در گیت هاب است که سه وظیفه‌ی اصلی را انجام می‌دهد:

  • پایش وابستگی‌ها: اسکن مداوم فایل‌های وابستگی مانند package.json، requirements.txt، composer.json و Gemfile.
  • هشدار آسیب‌پذیری: مقایسه‌ی وابستگی‌ها با پایگاه داده‌ی GitHub Advisory Database.
  • به‌روزرسانی خودکار: ایجاد Pull Request برای به‌روزرسانی وابستگی‌ها به نسخه‌های امن یا جدید.

این سرویس در سال ۲۰۱۹ به‌عنوان یک اپلیکیشن مستقل معرفی شد و در سال ۲۰۲۰ به‌طور کامل در گیت هاب ادغام شد. امروز، دپندابات یکی از ستون‌های کلیدی در مدیریت وابستگی‌ها در پروژه‌های نرم‌افزاری است.

اجزای دپندابات

دپندابات از سه بخش اصلی تشکیل می‌شود:

  1. Dependabot Alerts: هشدار درباره‌ی آسیب‌پذیری‌های موجود در وابستگی‌ها.
  2. Dependabot Security Updates: ایجاد Pull Request برای رفع آسیب‌پذیری‌ها.
  3. Dependabot Version Updates: به‌روزرسانی دوره‌ای وابستگی‌ها، حتی بدون آسیب‌پذیری.

هر یک از این بخش‌ها، می‌تواند به‌طور مستقل فعال یا غیرفعال شود. برای تیم‌هایی که به‌تازگی شروع به استفاده از دپندابات می‌کنند، توصیه می‌شود ابتدا Alerts را فعال کنند و سپس Security Updates و Version Updates را یکی‌یکی بیفزایند. برای مطالعه‌ی بیشتر در این حوزه، GitHub Actions و خودکارسازی کمک‌کننده است.

هشدار آسیب‌پذیری

هشدارهای دپندابات بر پایه‌ی GitHub Advisory Database ساخته می‌شوند. این پایگاه داده، شامل آسیب‌پذیری‌های ثبت‌شده در CVE (Common Vulnerabilities and Exposures) و گزارش‌های اختصاصی گیت هاب است. هر هشدار شامل اطلاعات زیر است:

  • شناسه‌ی آسیب‌پذیری (CVE یا GHSA).
  • نسخه‌های آسیب‌پذیر و نسخه‌های اصلاح‌شده.
  • سطح شدت (Low، Moderate، High، Critical).
  • توضیحات و منابع مرجع.

هشدارها در زبانه‌ی Security مخزن نمایش داده می‌شوند و می‌توانند به‌طور خودکار به اعضای تیم اطلاع داده شوند. برای مطالعه‌ی بیشتر درباره‌ی مفهوم CVE، مطالعه‌ی CVE و نقش آن در امنیت کمک‌کننده است.

هر وابستگی، یک در پشتی بالقوه است؛ دپندابات، نگهبانی است که این درها را پایش می‌کند.

به‌روزرسانی نسخه

دپندابات می‌تواند به‌طور دوره‌ای، Pull Requestهایی برای به‌روزرسانی وابستگی‌ها ایجاد کند. این به‌روزرسانی‌ها به دو دسته تقسیم می‌شوند:

  • Patch: اصلاح باگ‌های جزئی، بدون تغییر API.
  • Minor: افزودن قابلیت‌های جدید، با حفظ سازگاری.
  • Major: تغییرات ناسازگار با نسخه‌ی قبلی.

در پیکربندی، می‌توان تعیین کرد که دپندابات فقط Patch و Minor را به‌روزرسانی کند و Major را نادیده بگیرد. این تصمیم، به سیاست تیم در مدیریت ریسک بستگی دارد.

به‌روزرسانی امنیتی

به‌روزرسانی‌های امنیتی، برخلاف به‌روزرسانی‌های نسخه، تنها زمانی فعال می‌شوند که آسیب‌پذیری شناسایی شده باشد. این به‌روزرسانی‌ها به‌طور پیش‌فرض، فوری‌تر و با اولویت بالاتر ایجاد می‌شوند. سه نکته‌ی کلیدی:

  1. اولویت‌بندی: آسیب‌پذیری‌های Critical و High باید در اسرع وقت رفع شوند.
  2. آزمون: هر Pull Request باید از طریق CI (Continuous Integration) عبور کند.
  3. ادغام: در صورت موفقیت CI، Pull Request می‌تواند به‌طور خودکار ادغام شود.

برای مطالعه‌ی بیشتر در این حوزه، راهنمای Pull Request و رفع خطاهای رایج گیت کمک‌کننده است.

پیکربندی dependabot.yml

فایل پیکربندی دپندابات در مسیر .github/dependabot.yml قرار می‌گیرد و ساختار آن به این شکل است:

version: 2
updates:
  - package-ecosystem: "npm"
    directory: "/"
    schedule:
      interval: "weekly"
    open-pull-requests-limit: 5
    reviewers:
      - "team-lead"
    labels:
      - "dependencies"
    ignore:
      - dependency-name: "lodash"
        versions: ["4.x"]

نکات کلیدی در این پیکربندی:

  • package-ecosystem: نوع اکوسیستم پکیج (npm، pip، composer، bundler و غیره).
  • directory: مسیر نسبی که فایل وابستگی در آن قرار دارد.
  • schedule.interval: دوره‌ی بررسی (daily، weekly، monthly).
  • open-pull-requests-limit: حداکثر تعداد Pull Requestهای باز.
  • ignore: وابستگی‌هایی که نباید به‌روزرسانی شوند.

اگر در پروژه‌های وردپرسی از Composer برای مدیریت پکیج‌ها استفاده می‌کنید، دپندابات می‌تواند به‌طور خودکار وابستگی‌های PHP را نیز پایش کند. برای مطالعه‌ی بیشتر در این حوزه، PHP در وردپرس و نوشتن کد PHP امن کمک‌کننده است.

امنیت زنجیره تأمین

امنیت زنجیره‌ی تأمین نرم‌افزار، یکی از مباحث کلیدی در سال‌های اخیر بوده است. حملات معروفی مانند SolarWinds نشان داد که حتی یک وابستگی می‌تواند به نفوذ در سازمان‌های بزرگ منجر شود. دپندابات در این زمینه، سه نقش اصلی دارد:

  1. شناسایی سریع: هشدار درباره‌ی آسیب‌پذیری‌ها پیش از تبدیل شدن به بحران.
  2. رفع خودکار: کاهش زمان بین شناسایی و رفع آسیب‌پذیری.
  3. پایش مستمر: اطمینان از این که وابستگی‌ها در طول زمان امن باقی می‌مانند.

با این حال، دپندابات تنها یک لایه از امنیت است. برای امنیت کامل زنجیره‌ی تأمین، ابزارهای مکمل مانند SAST (Static Application Security Testing) و SBOM (Software Bill of Materials) نیز توصیه می‌شود. اگر با اصول امنیت API آشنایی ندارید، مطالعه‌ی اصول امنیت API کمک‌کننده است.

دپندابات و GitHub Actions

دپندابات در کنار GitHub Actions، امکان خودکارسازی کامل مدیریت وابستگی را فراهم می‌کند. یک الگوی رایج:

name: Auto Merge Dependabot
on: pull_request_target

jobs:
  auto-merge:
    if: github.actor == 'dependabot[bot]'
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Auto approve
        run: gh pr review --approve "$PR_URL"
      - name: Auto merge
        run: gh pr merge --auto --merge "$PR_URL"

این ساختار، امکان ادغام خودکار Pull Requestهای دپندابات را در صورت موفقیت CI فراهم می‌کند. با این حال، توصیه می‌شود ادغام خودکار تنها برای به‌روزرسانی‌های Patch و Minor فعال شود. برای مطالعه‌ی بیشتر در این حوزه، راهنمای GitHub Actions و CI/CD برای پروژه‌های وردپرسی کمک‌کننده است.

خودکارسازی بدون تست، سرعت بدون امنیت است.

خطاها و مشکلات رایج

سه مشکل رایج در استفاده از دپندابات:

  1. Pull Requestهای زیاد: اگر تعداد وابستگی‌ها بالا باشد، می‌توان با open-pull-requests-limit تعداد آن‌ها را محدود کرد.
  2. تضاد مکرر: در پروژه‌هایی که چند توسعه‌دهنده روی فایل‌های وابستگی کار می‌کنند، تضاد می‌تواند رخ دهد. استفاده از rebase خودکار می‌تواند این مشکل را کاهش دهد.
  3. شکست CI: در برخی موارد، به‌روزرسانی خودکار می‌تواند به شکست CI منجر شود. تنظیم دقیق ignore و اولویت‌بندی به‌روزرسانی‌ها می‌تواند این مشکل را کاهش دهد.

پرسش‌های پرتکرار

آیا دپندابات رایگان است؟

بله، برای مخازن عمومی و خصوصی گیت هاب، دپندابات به‌طور رایگان در دسترس است. برای مخازن خصوصی، به سهمیه‌ی GitHub Actions نیاز دارد.

چگونه دپندابات را فعال کنیم؟

از تنظیمات مخزن، بخش Security، گزینه‌های Dependabot Alerts، Security Updates و Version Updates را فعال کنید و در صورت نیاز، فایل .github/dependabot.yml را بسازید.

تفاوت Security Updates و Version Updates چیست؟

Security Updates تنها در صورت وجود آسیب‌پذیری فعال می‌شوند؛ Version Updates به‌طور دوره‌ای و بدون توجه به آسیب‌پذیری، وابستگی‌ها را به‌روزرسانی می‌کنند.

آیا دپندابات می‌تواند جایگزین ابزارهای امنیتی دیگر شود؟

خیر. دپندابات یک لایه از امنیت زنجیره‌ی تأمین است و باید در کنار ابزارهای دیگر مانند SAST و SBOM به کار رود.

امنیت، فرایندی مداوم

دپندابات در گیت هاب، نمونه‌ای از این حقیقت است که امنیت، فرایندی مداوم و نه یک رویداد تک‌بار است. با پایش خودکار وابستگی‌ها، هشدار به‌موقع و به‌روزرسانی سریع، تیم‌های توسعه می‌توانند سطح ریسک زنجیره‌ی تأمین را به‌طور پیوسته کاهش دهند. برای تیم‌هایی که با پروژه‌های وردپرسی یا PHP کار می‌کنند، دپندابات می‌تواند به‌عنوان یک لایه‌ی مهم از استراتژی امنیتی عمل کند. اگر در پروژه‌های واقعی با آسیب‌پذیری‌های وابستگی مواجه شده‌اید، برای خوانندگان بعدی ارزشمند است بدانید کدام رویکرد بیشترین کمک را به شما کرده است.