Files

128 lines
12 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# مشخصات درس‌نامه: به‌روزرسانی‌های امنیتی دوره‌ای و ارتقای ایمن وابستگی‌ها (SemVer & Updates)
- **شناسه در سیلابس:** `L13.5`
- **فصل:** فصل ۱۳: نگهداری محصول (Ch 13)
- **نوع محتوا:** 📘 درس‌نامه متنی
- **زمان تقریبی مطالعه:** ۱۶ دقیقه
- **پیش‌نیازهای مستقیم:** `L13.4` (ثبت لاگ‌ها و ردگیری هوشمند خطاهای پروداکشن)
---
## ۱. اهداف یادگیری (Learning Objectives - Bloom's Taxonomy)
دانشجو پس از مطالعهٔ این درس‌نامه باید بتواند:
- [ ] **درک کند (Understand):** پدیده «پوسیدگی نرم‌افزار» (Software Rot) را تحلیل کرده و بداند چرا کدی که امروز کاملاً سالم است، شش ماه دیگر به دلیل کشف آسیب‌پذیری‌های امنیتی جدید (CVEs) نیازمند مراقبت و ارتقاست.
- [ ] **تحلیل/ارزیابی کند (Evaluate):** ساختار سیستم نسخه‌بندی معنایی (Semantic Versioning - SemVer) شامل تفاوت‌های حیاتی Major، Minor و Patch را بشناسد و تفاوت نمادهای `^` و `~` در `package.json` را ارزیابی کند.
- [ ] **به‌کار ببندد (Apply):** یک رویه ۴ مرحله‌ای ایمن برای به‌روزرسانی وابستگی‌ها (بررسی با `npm outdated` $\rightarrow$ ایجاد شاخه گیت اختصاصی $\rightarrow$ آپدیت با `npm update` $\rightarrow$ راستی‌آزمایی با `npm run build`) اجرا نماید.
- [ ] **ایجاد کند (Create):** ربات هشدارهای امنیتی گیت‌هاب (GitHub Dependabot) را برای دریافت خودکار درخواست‌های ادغام (PR) اصلاحی آسیب‌پذیری‌های بحرانی فعال کند.
---
## ۲. محدوده و مرزهای محتوا (Scope & Boundaries)
### آنچه باید پوشش داده شود (In-Scope):
1. **استعاره سرویس دوره‌ای خودرو و تعویض روغن:**
* خودرویی که در پارکینگ پارک شده هم روغن فاسد می‌کند؛ نرم‌افزاری که دست نخورده هم به مرور زمان مشمول کشف رخنه‌های امنیتی جهانی می‌شود.
2. **رمزگشایی از نگارش معنایی (Semantic Versioning - SemVer):**
* ساختار سه‌گانه `MAJOR.MINOR.PATCH` (مثلاً نسخه `15.2.1`):
- پچ (Patch): رفع باگ‌ها و آسیب‌پذیری‌های امنیتی؛ بدون هیچ تغییر در کارکرد قبلی (کاملاً امن برای آپدیت).
- ماینور (Minor): اضافه شدن قابلیت‌های جدید با حفظ سازگاری با کدهای قبلی (Backward Compatible).
- میجر (Major): تغییرات بنیادین و شکننده (Breaking Changes) که ممکن است کدهای فعلی را بشکند و نیازمند بررسی دقیق مستندات است.
* تفاوت عملگر کلاهک (`^`) و مد (`~`) در قفل کردن نسخه‌ها در `package.json`.
3. **رویه استاندارد ۴ مرحله‌ای ارتقای بسته‌ها بدون خرابی پروژه:**
* گام ۱: رصد وضعیت پکیج‌ها با دستور `npm outdated`.
* گام ۲: ساخت برنچ مجزا در گیت (`git checkout -b chore/update-deps`) برای جلوگیری از خرابی شاخه اصلی.
* گام ۳: اجرای `npm update` برای دریافت آخرین پچ‌ها و ماینورهای سازگار.
* گام ۴: اجرای `npm run build` و تست‌های خودکار برای تایید سلامت کامل و ادغام در شاخه `main`.
4. **ابزار تعاملی ارتقای نسخه‌های ماژور (`npm-check-updates`):**
* نحوه استفاده از `npx npm-check-updates -i` برای انتخاب آگاهانه پکیج‌هایی که می‌خواهیم به نسخه جدیدتر ببریم.
5. **فعال‌سازی هوشمند Dependabot در مخزن گیت‌هاب:**
* دریافت ایمیل‌های هشدار خودکار در صورت کشف باگ‌های امنیتی بحرانی در کتابخانه‌ها و امکان مرج با یک کلیک.
6. **کال‌اوت‌های آموزشی و هشدار کوئرا:**
* کال‌اوت بنفش (`<details class="violet">`): مفهوم Breaking Changes در آپدیت‌های ماژور (نظیر جهش از Next.js 14 به 15) و چرایی لزوم خواندن راهنمای رسمی ارتقا (Migration Guide).
* کال‌اوت سبز (`<details class="green">`): آرامش خاطر با به‌روزرسانی‌های ماهانه ۱۵ دقیقه‌ای که مانع از انباشت بدهی فنی (Technical Debt) می‌شود.
* کال‌اوت قرمز (`<details class="red">`): هرگز آپدیت‌های ماژور را بدون داشتن کامیت ذخیره و در شب پیش از ارائه به کارفرما انجام ندهید!
### آنچه نباید وارد آن شویم (Out-of-Scope):
- بازنویسی کامل معماری کدها در اثر تغییر پارادایم‌های بنیادین فریم‌ورک‌ها.
- انتشار دستی بسته‌های شخصی در رجیستری جهانی npm.
---
## ۳. مفاهیم کلیدی و کلمات تخصصی (Key Concepts & Terms)
| اصطلاح انگلیسی | معادل فارسی مصوب | توضیح یک‌خطی ساده |
| :--- | :--- | :--- |
| Software Rot | پوسیدگی نرم‌افزار | فرسودگی تدریجی نرم‌افزار به دلیل منسوخ شدن کتابخانه‌ها و کشف آسیب‌پذیری‌های امنیتی جدید |
| Semantic Versioning (SemVer) | نسخه‌بندی معنایی | سیستم استاندارد جهانی شماره‌گذاری نسخه‌ها به صورت MAJOR.MINOR.PATCH برای بیان ماهیت تغییرات |
| Breaking Change | تغییر شکننده ناسازگار | تغییری در نسخه جدید یک کتابخانه که نیازمند بازنویسی بخش‌هایی از کدهای استفاده‌کننده است |
| Dependabot | بات امنیتی دیپندابات | ربات خودکار گیت‌هاب برای اسکن وابستگی‌ها و ایجاد پول ریکوئست‌های خودکار ارتقای امنیتی |
| Technical Debt | بدهی فنی | هزینه و زحمت پنهان ناشی از تعویق انداختن نگهداری، بازنویسی و به‌روزرسانی کدهای سیستم |
| CVE (Common Vulnerabilities) | پایگاه جهانی آسیب‌پذیری‌ها | شناسه عمومی و استاندارد بین‌المللی برای گزارش رخنه‌های امنیتی کشف‌شده در نرم‌افزارها |
---
## ۴. جایگاه‌های تصاویر و نمودارها (Visual & Diagram Placeholders)
> **راهنمای ایجنت نویسنده:** تمام تصاویر باید در پوشهٔ `images/` ذخیره شده و در جدول تک‌خانه‌ای وسط‌چین درج شوند:
1. **تصویر کاور درس:** `images/cover.png`
* **موضوع:** جعبه دنده‌های نئونی دیجیتال که به آرامی در حال تعویض و روغن‌کاری هستند و قطعات قدیمی با قطعات نو و درخشان جایگزین می‌شوند.
2. **کالبدشکافی اعداد نسخه‌بندی معنایی (SemVer):** `images/semver-breakdown-anatomy.png`
* **موضوع:** اینفوگرافیک توضیحی: نمایش عدد ۱۵.۲.۱ با فلش‌های رنگی روی Major (شکننده)، Minor (فیچر جدید)، و Patch (رفع باگ امنیتی).
3. **خروجی دستور `npm outdated` در ترمینال:** `images/npm-outdated-terminal-screen.png`
* **موضوع:** اسکرین‌شات از جدول رنگی ترمینال با ستون‌های Package، Current، Wanted و Latest.
4. **درخواست ادغام خودکار امنیتی Dependabot در گیت‌هاب:** `images/github-dependabot-pr-preview.png`
* **موضوع:** اسکرین‌شات از یک Pull Request خودکار در گیت‌هاب با تگ سبز «Security Update: bump library version to fix CVE».
---
## ۵. بخش‌بندی و ساختار محتوایی پیشنهادی درس‌نامه (`README.md`)
1. **تیتر اصلی:** `# به‌روزرسانی‌های امنیتی دوره‌ای و ارتقای ایمن وابستگی‌ها (SemVer & Updates)`
2. **مقدمه:** چرا کدی که امروز بی‌نقص کار می‌کند، اگر به حال خود رها شود سال آینده به لانه زنبور رخنه‌های امنیتی تبدیل خواهد شد؟
3. **جدول کاور درس**
4. **پدیده پوسیدگی نرم‌افزار (Software Rot):**
* جهان اطراف کد شما در حال حرکت است؛ مرورگرها آپدیت می‌شوند و هکرها رخنه‌های جدید کشف می‌کنند.
5. **زبان بین‌المللی نسخه‌ها: SemVer را مثل یک حرفه‌ای بخوانید:**
* تفاوت Patch (بدون دردسر)، Minor (امکانات نو)، و Major (احتیاط، زمین لغزنده است!).
* نمادهای `^` و `~` در `package.json` چه دستوری به npm می‌دهند؟
6. **پروتکل ۴ گانه به‌روزرسانی بدون خرابکاری در پورتفولیو:**
* گام ۱: بازرسی وضعیت با `npm outdated`.
* گام ۲: باز کردن یک برنچ امن در گیت.
* گام ۳: اجرای `npm update`.
* گام ۴: راستی‌آزمایی با تست بیلد محلی `npm run build`.
7. **استفاده از ابزار شیک `npm-check-updates` برای ارتقای هدفمند:**
* انتخاب گرافیکی بسته‌ها در ترمینال و مشاهده پیش‌نمایش نسخه‌های جدید.
8. **فعال‌سازی نگهبان خودکار گیت‌هاب (Dependabot):**
* سپردن رصد ۲۴ ساعته آسیب‌پذیری‌های روز دنیا به ربات‌های گیت‌هاب.
9. **دستورات چندسکویی برای بررسی و آپدیت وابستگی‌ها:**
* منوی کشویی سه‌گانه برای ویندوز، مک و لینوکس:
- Windows (PowerShell):
```powershell
npm outdated
npm update
npm run build
```
- macOS (Terminal):
```bash
npm outdated
npm update
npm run build
```
- Linux (Bash):
```bash
npm outdated
npm update
npm run build
```
10. **باکس نکته Quera (`<details class="violet">`):** اهمیت مطالعه فایل CHANGELOG یا Releases در گیت‌هاب کتابخانه قبل از آپدیت‌های بزرگ ماژور.
11. **باکس هشدار Quera (`<details class="red">`):** هرگز همه پکیج‌ها را به یکباره و بدون تست با دستورات فورس آپدیت نکنید؛ یک ناسازگاری کوچک می‌تواند ساعت‌ها وقت شما را برای ریکاوری تلف کند.
12. **باکس رضایت‌بخش Quera (`<details class="green">`):** پورتفولیویی که همیشه تمیز، مدرن و مجهز به آخرین پچ‌های امنیتی روز دنیاست.
13. **جمع‌بندی درس‌نامه:** تسلط بر نگهداری زیرساختی؛ ورود به مبحث رشد و دیده شدن: سئو تکنیکال و تحلیل رفتار کاربر در درس بعدی.
---
## ۶. معیارهای پذیرش (Acceptance Criteria for Reviewer)
- [ ] پدیده فرسودگی نرم‌افزار و ضرورت به‌روزرسانی‌های مستمر تشریح شود.
- [ ] ساختار نسخه‌بندی معنایی (SemVer) و علائم `^` و `~` به روشنی آموزش داده شود.
- [ ] پروتکل ۴ مرحله‌ای ایمن ارتقای وابستگی‌ها به همراه دستورات چندسکویی ارائه گردد.
- [ ] شیوه فعال‌سازی و کاربرد Dependabot در مخزن گیت‌هاب تشریح شود.