128 lines
12 KiB
Markdown
128 lines
12 KiB
Markdown
# مشخصات درسنامه: بهروزرسانیهای امنیتی دورهای و ارتقای ایمن وابستگیها (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 در مخزن گیتهاب تشریح شود.
|