diff --git a/chapters/11-security-and-best-practices/00-lesson-chapter-goals/spec.md b/chapters/11-security-and-best-practices/00-lesson-chapter-goals/spec.md new file mode 100644 index 0000000..cce6f74 --- /dev/null +++ b/chapters/11-security-and-best-practices/00-lesson-chapter-goals/spec.md @@ -0,0 +1,82 @@ +# مشخصات درس‌نامه: اهداف فصل یازدهم (Chapter Goals) +- **شناسه در سیلابس:** `L11.1` +- **فصل:** فصل ۱۱: امنیت و استفاده مسئولانه (Ch 11) +- **نوع محتوا:** 📘 درس‌نامه متنی +- **زمان تقریبی مطالعه:** ۵ دقیقه +- **پیش‌نیازهای مستقیم:** `L10.8` (تزریق مغز هوش مصنوعی به محصول) + +--- + +## ۱. اهداف یادگیری (Learning Objectives - Bloom's Taxonomy) +دانشجو پس از مطالعهٔ این درس‌نامه باید بتواند: +- [ ] **درک کند (Understand):** چرا امنیت یک «قابلیت افزوده در پایان کار» نیست، بلکه شالوده و مسئولیت اصلی هر سازنده نرم‌افزار است، به خصوص در دورانی که کدهای هوش مصنوعی می‌توانند باگ‌های امنیتی پنهان ایجاد کنند. +- [ ] **درک کند (Understand):** نقشه راه ۹ درس‌نامه این فصل شامل: چک‌لیست پیش از انتشار، گاوصندوق Secretها و API Keyها، کنترل دسترسی و احراز هویت (Auth & Access)، اعتبارسنجی ورودی‌ها با Zod و مقابله با XSS، امنیت دیتابیس و آپلود فایل، مدیریت Dependencyها و زنجیره تأمین، محدودسازی نرخ درخواست (Rate Limiting) با Upstash Redis، و در نهایت هزینه، مالکیت فکری و اخلاق وایب کدینگ. +- [ ] **تحلیل/ارزیابی کند (Evaluate):** خطرات امنیتی نرم‌افزارهای ساخته شده با هوش مصنوعی (نظیر توهم پکیج‌های مخرب و آسیب‌پذیری‌های تزریق کد) را در برابر اعتماد کورکورانه به خروجی ایجنت‌ها ارزیابی کند. +- [ ] **به‌کار ببندد (Apply):** پروژه پورتفولیو را به سپرهای دفاعی لایه‌به‌لایه تجهیز کند تا هیچ کاربر نفوذگری نتواند داده‌ها را دستکاری کند یا هزینه‌های مالی سرسام‌آور تحمیل نماید. + +--- + +## ۲. محدوده و مرزهای محتوا (Scope & Boundaries) + +### آنچه باید پوشش داده شود (In-Scope): +1. **امنیت در عصر وایب کدینگ: هوش مصنوعی کد می‌نویسد، اما مسئولیت با شماست:** + * ایجنت‌ها کد کارآمد تولید می‌کنند، اما اغلب تدابیر امنیتی، اعتبارسنجی لبه‌ها و محدودیت‌ها را از قلم می‌اندازند. +2. **مرور سرفصل‌های تخصصی فصل ۱۱:** + * درس ۱۱.۲: چک‌لیست پیش از انتشار (Pre-Launch Checklist)؛ ارزیابی همه‌جانبه سیستم قبل از نمایش به عموم. + * درس ۱۱.۳: مدیریت و مهار Secretها و API Keyها؛ جلوگیری قطعی از نشت اطلاعات در مخازن و مرورگرها. + * درس ۱۱.۴: احراز هویت و کنترل دسترسی پیشرفته (Auth & RBAC)؛ محافظت از روت‌های پنل ادمین و تفکیک دسترسی‌ها. + * درس ۱۱.۵: اعتبارسنجی ورودی‌ها با Zod و ضدعفونی داده‌ها برای جلوگیری از حملات XSS و تزریق اسکریپت. + * درس ۱۱.۶: امنیت دیتابیس و اعتبارسنجی فایل‌های آپلودی در باکت‌های Supabase Storage (بررسی MIME و سایز). + * درس ۱۱.۷: مدیریت پکیج‌ها و امنیت زنجیره تأمین؛ رصد باگ‌ها با `npm audit` و پرهیز از پکیج‌های توهمی مخرب. + * درس ۱۱.۸: جلوگیری از حملات منع سرویس با محدودسازی نرخ درخواست (Rate Limiting) با Upstash Redis. + * درس ۱۱.۹: هزینه، مالکیت، کپی‌رایت کدهای AI و اخلاق حرفه‌ای مهندسی نرم‌افزار. +3. **تمرکز بر پروژه پورتفولیو:** + * تبدیل پورتفولیو از یک پروژه آسیب‌پذیر به یک قلعه امن دیجیتال و آماده عرضه جهانی. +4. **کال‌اوت آرامش‌بخش Quera (`
`):** تغییر دیدگاه؛ امنیت به معنای پارانویا نیست، بلکه به معنای آسودگی خاطر برای خواب راحت شبانه توسعه‌دهنده است. + +### آنچه نباید وارد آن شویم (Out-of-Scope): +- مباحث تخصصی رمزنگاری کوانتومی و تست نفوذ در لایه فیزیکی شبکه. +- استقرار سرورهای ابری و ست کردن رکوردهای دامنه (در فصل ۱۲ بررسی می‌شود). + +--- + +## ۳. مفاهیم کلیدی و کلمات تخصصی (Key Concepts & Terms) + +| اصطلاح انگلیسی | معادل فارسی مصوب | توضیح یک‌خطی ساده | +| :--- | :--- | :--- | +| Defense in Depth | دفاع چندلایه | استراتژی امنیتی که در آن چندین لایه محافظتی متوالی برای حفاظت از دارایی‌ها قرار می‌گیرد | +| Security by Design | امنیت در طراحی | رویکردی که در آن امنیت از نخستین خط کد و در تمام مراحل توسعه رعایت می‌شود | +| Pre-Launch Checklist | چک‌لیست پیش از انتشار | فهرست استاندارد کنترل نهایی برای اطمینان از سلامت، امنیت و پایداری قبل از عرضه عمومی | +| Responsible AI | هوش مصنوعی مسئولانه | پایبندی به اصول اخلاقی، قانونی، حفظ حریم خصوصی و امنیت در استفاده از فناوری‌های هوش مصنوعی | + +--- + +## ۴. جایگاه‌های تصاویر و نمودارها (Visual & Diagram Placeholders) +> **راهنمای ایجنت نویسنده:** تمام تصاویر باید در پوشهٔ `images/` ذخیره شده و در جدول تک‌خانه‌ای وسط‌چین درج شوند: + +1. **تصویر کاور درس:** `images/cover.png` + * **موضوع:** سپر دیجیتال نئونی درخشان با قفل طلایی که کدهای پروژه و سرورها را احاطه کرده است. +2. **نقشه راه جامع فصل ۱۱:** `images/chapter-11-roadmap.png` + * **موضوع:** اینفوگرافیک ۹ مرحله‌ای فصل ۱۱ با نمادهای چک‌لیست، کلید، قفل احراز هویت، Zod، باکت امن، پکیج سالم، Rate Limit و ترازوی اخلاق. +3. **هرم دفاع چندلایه در وب مدرن:** `images/defense-in-depth-layers.png` + * **موضوع:** دیاگرام هرمی لایه‌های محافظت: لایه ۱: اعتبارسنجی کلاینت $\rightarrow$ لایه ۲: ریت لیمیتینگ $\rightarrow$ لایه ۳: سرور اکشن و Zod $\rightarrow$ لایه ۴: RLS و دیتابیس. + +--- + +## ۵. بخش‌بندی و ساختار محتوایی پیشنهادی درس‌نامه (`README.md`) + +1. **تیتر اصلی:** `# اهداف فصل یازدهم: امنیت و استفاده مسئولانه؛ تبدیل نرم‌افزار به قلعه‌ای نفوذناپذیر` +2. **مقدمه کوتاه:** چرا یک اشتباه کوچک امنیتی می‌تواند ثمره ماه‌ها تلاش شما را یک‌شبه بر باد دهد؟ +3. **جدول کاور درس** +4. **سرفصل‌های طلایی فصل در یک نگاه:** مرور ۹ ایستگاه دفاعی فصل. +5. **جدول نقشه راه یادگیری فصل** +6. **مسئولیت در عصر وایب کدینگ:** چرا هوش مصنوعی نمی‌تواند در دادگاه یا نزد کارفرما پاسخگوی باگ‌های امنیتی باشد؟ +7. **پورتفولیوی شخصی در نقش نماد حرفه‌ای‌گری:** نشان دادن بلوغ مهندسی به کارفرمایان بزرگ با رعایت بالاترین استانداردهای امنیتی. +8. **کال‌اوت روحیه‌بخش Quera (`
`):** امنیت یک مهارت جذاب و آرامش‌بخش است؛ وقتی قفل‌ها درست بسته شوند، با خیال آسوده به استراحت می‌پردازید. + +--- + +## ۶. معیارهای پذیرش (Acceptance Criteria for Reviewer) +- [ ] اهداف کلان فصل ۱۱ و اهمیت مسئولیت‌پذیری در وایب کدینگ به روشنی تبیین شود. +- [ ] سرفصل‌های ۹ درس‌نامه بعدی با ذکر ابزارهای مصوب (Zod, Upstash, Supabase Storage) معرفی شوند. +- [ ] استراتژی دفاع چندلایه (Defense in Depth) به صورت مفهومی تشریح گردد. diff --git a/chapters/11-security-and-best-practices/01-lesson-pre-launch-checklist/spec.md b/chapters/11-security-and-best-practices/01-lesson-pre-launch-checklist/spec.md new file mode 100644 index 0000000..f02eeb9 --- /dev/null +++ b/chapters/11-security-and-best-practices/01-lesson-pre-launch-checklist/spec.md @@ -0,0 +1,113 @@ +# مشخصات درس‌نامه: چک‌لیست پیش از انتشار (Pre-Launch Checklist) و تست دود نهایی +- **شناسه در سیلابس:** `L11.2` +- **فصل:** فصل ۱۱: امنیت و استفاده مسئولانه (Ch 11) +- **نوع محتوا:** 📘 درس‌نامه متنی +- **زمان تقریبی مطالعه:** ۱۶ دقیقه +- **پیش‌نیازهای مستقیم:** `L11.1` (اهداف فصل یازدهم) + +--- + +## ۱. اهداف یادگیری (Learning Objectives - Bloom's Taxonomy) +دانشجو پس از مطالعهٔ این درس‌نامه باید بتواند: +- [ ] **درک کند (Understand):** چرا هیجان ناشی از اشتراک‌گذاری سریع پروژه در شبکه‌های اجتماعی بدون بازرسی نهایی می‌تواند باعث آبروریزی فنی یا هک شدن پروژه شود. +- [ ] **تحلیل/ارزیابی کند (Evaluate):** وضعیت آمادگی محصول را بر اساس ۵ ستون اصلی چک‌لیست انتشار (امنیت، کارایی، سئو و شبکه‌های اجتماعی، صفحات خطا، و داده‌های تمیز) ارزیابی کند. +- [ ] **به‌کار ببندد (Apply):** آزمون دود (Smoke Test) را در یک پنجره کاملاً ناشناس (Incognito) مرورگر اجرا کرده و تمام مسیرهای حیاتی پورتفولیو را تست نماید. +- [ ] **ایجاد کند (Create):** کارت پیش‌نمایش شبکه‌های اجتماعی (Open Graph Image) و صفحات خطای سفارشی شکیل (Custom 404 & 500) را با ابزارهای مدرن Next.js پیاده‌سازی کند. + +--- + +## ۲. محدوده و مرزهای محتوا (Scope & Boundaries) + +### آنچه باید پوشش داده شود (In-Scope): +1. **استعاره پرواز هواپیما و چک‌لیست خلبان:** + * خلبان‌ها هزاران ساعت پرواز دارند، اما هرگز بدون بررسی فیزیکی بال‌ها و موتورها تیک‌آف نمی‌کنند. +2. **کالبدشکافی ۵ ستون چک‌لیست طلایی پیش از انتشار:** + * ستون ۱: امنیت پایه (نبود کلید در کدهای گیت، بسته بودن روت‌های `/admin` و فعال بودن RLS). + * ستون ۲: سرعت و کارایی (امتیاز لایت‌هاوس بالای ۹۰، تبدیل فرمت عکس‌ها با `next/image` به WebP). + * ستون ۳: سئو و کارت‌های شبکه‌های اجتماعی (تنظیم متا تگ‌ها، تگ‌های Open Graph و تصویر `og:image` برای لینک‌های تلگرام، توییتر و لینکدین). + * ستون ۴: صفحات خطای اختصاصی و تجربه کاربری (صفحه ۴۰۴ با لینک بازگشت به خانه، دکمه تلاش مجدد در صفحه خطا). + * ستون ۵: پاک‌سازی داده‌های ساختگی (حذف پروژه‌های تستی "Lorem Ipsum" و تست ادمین‌های با رمز 123456). +3. **اجرای تست دود (Smoke Test) در مرورگر:** + * سناریوی گام‌به‌گام: ورود کارفرما در حالت ناشناس $\rightarrow$ چت با دستیار هوش مصنوعی $\rightarrow$ ارسال پیامک تماس $\rightarrow$ تست درگاه پرداخت تستی $\rightarrow$ بازبینی واکنش‌گرایی در عرض ۳۶۰ پیکسل. +4. **دستورات چندسکویی برای بیلد پروداکشن و بازرسی اندازه باندل:** + * دستورات اجرای تست ساخت نهایی در ویندوز، مک و لینوکس: + - `npm run build` +5. **کال‌اوت‌های آموزشی و هشدار کوئرا:** + * کال‌اوت بنفش (`
`): نحوه کار ربات‌های تلگرام و واتس‌اپ در خواندن تگ‌های Open Graph برای ساخت پیش‌نمایش‌های شیک لینک. + * کال‌اوت سبز (`
`): ابزارهای رایگان تولید فاوآیکون (Favicon) و متاتگ‌های مدرن. + * کال‌اوت قرمز (`
`): تله باقی ماندن دیتای ساختگی؛ حتماً دیتابیس را پیش از انتشار با پروژه‌ها و متن‌های واقعی خود پر کنید. + +### آنچه نباید وارد آن شویم (Out-of-Scope): +- جزییات فنی کدنویسی Rate Limiting یا Zod (در درس‌های بعدی فصل ۱۱ به تفکیک ارائه می‌شوند). +- خرید دامنه و تنظیمات DNS ابری (فصل ۱۲). + +--- + +## ۳. مفاهیم کلیدی و کلمات تخصصی (Key Concepts & Terms) + +| اصطلاح انگلیسی | معادل فارسی مصوب | توضیح یک‌خطی ساده | +| :--- | :--- | :--- | +| Pre-Launch Checklist | چک‌لیست پیش از عرضه | جدول الزامات اساسی که قبل از در دسترس عموم قرار گرفتن سایت باید تیک بخورند | +| Smoke Test | تست دود | آزمون سریع و کلی برای اطمینان از اینکه عملکردهای حیاتی سیستم بدون دود کردن و انفجار کار می‌کنند | +| Open Graph (OG) | پروتکل گراف باز | استانداردی برای تعیین عنوان، توضیحات و تصویر پیش‌نمایش سایت در زمان اشتراک‌گذاری در شبکه‌های اجتماعی | +| Custom 404 Page | صفحه خطای اختصاصی ۴۰۴ | صفحه‌ای زیبا و سازگار با تم سایت برای راهنمایی کاربرانی که به آدرس‌های اشتباه سر می‌زنند | +| Bundle Analyzer | تحلیل‌گر اندازه باندل | ابزاری برای نمایش حجم فایل‌های جاوااسکریپت و کشف کتابخانه‌های سنگین و زاید | + +--- + +## ۴. جایگاه‌های تصاویر و نمودارها (Visual & Diagram Placeholders) +> **راهنمای ایجنت نویسنده:** تمام تصاویر باید در پوشهٔ `images/` ذخیره شده و در جدول تک‌خانه‌ای وسط‌چین درج شوند: + +1. **تصویر کاور درس:** `images/cover.png` + * **موضوع:** تابلوی پرتاب موشک با چک‌لیست دیجیتالی تیک‌خورده و شمارش معکوس پرتاب محصول روی نمایشگر ادیتور. +2. **اینفوگرافیک ۵ ستون چک‌لیست پیش از انتشار:** `images/pre-launch-five-pillars.png` + * **موضوع:** نمایش ستون‌های ۵ گانه: امنیت، کارایی، سئو/OG، صفحات خطا، و دیتای واقعی با آیکون‌های جذاب. +3. **پیش‌نمایش کارت اشتراک‌گذاری در شبکه‌های اجتماعی:** `images/open-graph-social-card-preview.png` + * **موضوع:** مقایسه یک لینک زشت بدون پیش‌نمایش در تلگرام با یک پیش‌نمایش لوکس شامل تصویر کاور پورتفولیو، نام سازنده و توضیحات کوتاه. +4. **صفحه خطای ۴۰۴ سفارشی طراحی‌شده:** `images/custom-404-design-preview.png` + * **موضوع:** صفحه ۴۰۴ مدرن با تم تاریک، گرافیک فضایی جذاب، و دکمه بازگشت به صفحه اصلی. + +--- + +## ۵. بخش‌بندی و ساختار محتوایی پیشنهادی درس‌نامه (`README.md`) + +1. **تیتر اصلی:** `# چک‌لیست پیش از انتشار (Pre-Launch Checklist) و تست دود نهایی` +2. **مقدمه:** چرا یک انتشار شتاب‌زده می‌تواند آبروی مهندسی شما را زیر سوال ببرد و چطور با یک چک‌لیست ۱۵ دقیقه‌ای سربلند شویم؟ +3. **جدول کاور درس** +4. **استعاره پرواز تجاری و مسئولیت خلبان:** + * اهمیت چک‌لیست قبل از فشردن دکمه استارت. +5. **ستون‌های ۵ گانه چک‌لیست پیش از انتشار (با جزئیات پروژه پورتفولیو):** + * امنیت، پرفورمنس، سئو و شبکه‌های اجتماعی، هندل کردن ارورها و پاک‌سازی دیتای تست. +6. **ساخت صفحات اختصاصی خطا (`not-found.tsx` و `error.tsx`) در Next.js:** + * چرا نباید کاربر با صفحه پیش‌فرض زشت خاکستری مواجه شود؟ +7. **پیکربندی تگ‌های Open Graph و تصویر اشتراک‌گذاری اجتماعی:** + * تعریف `metadata` در `app/layout.tsx` برای تولید کارت‌های شکیل در تلگرام و توییتر. +8. **جعبه پرامپت طلایی: اجرای تست دود و ساخت صفحات خطا با ایجنت:** + * پرامپت دقیق: + > «من می‌خواهم پروژه را برای انتشار عمومی آماده کنم. لطفاً ۱) یک صفحه `not-found.tsx` فوق‌العاده مدرن با تم دارک و دکمه بازگشت به صفحه اصلی بساز، ۲) متاتگ‌های Open Graph شامل عنوان، توضیحات و تصویر `og-image.png` را به `layout.tsx` اضافه کن، و ۳) یک چک‌لیست سریع تست دود از تمام فیچرها بنویس تا در پنجره ناشناس تست کنم.» +9. **دستورات چندسکویی برای بررسی بیلد نهایی:** + * منوی کشویی سه‌گانه برای ویندوز، مک و لینوکس: + - Windows (PowerShell): + ```powershell + npm run build + ``` + - macOS (Terminal): + ```bash + npm run build + ``` + - Linux (Bash): + ```bash + npm run build + ``` +10. **باکس نکته Quera (`
`):** استفاده از ابزارهای آنلاین رایگان مانند OpenGraph.xyz برای دیدن پیش‌نمایش لینک قبل از انتشار. +11. **باکس هشدار Quera (`
`):** حتماً پسوردهای ساده یا اکانت‌های ادمین تستی را پیش از انتشار حذف کنید. +12. **باکس رضایت‌بخش Quera (`
`):** ارسال لینک تستی به دوست یا همکار نزدیک و شنیدن اولین بازخورد مثبت. +13. **جمع‌بندی درس‌نامه:** گذر از چک‌لیست مقدماتی؛ ورود به مبحث مرگبار نشت اطلاعات محرمانه و مدیریت کلیدها در درس بعدی. + +--- + +## ۶. معیارهای پذیرش (Acceptance Criteria for Reviewer) +- [ ] ستون‌های پنج‌گانه چک‌لیست پیش از انتشار به صورت کامل و کاربردی ارائه گردند. +- [ ] نحوه پیاده‌سازی صفحات خطای اختصاصی Next.js (not-found.tsx) آموزش داده شود. +- [ ] تنظیم تگ‌های Open Graph برای پیش‌نمایش جذاب در شبکه‌های اجتماعی تشریح شود. +- [ ] دستورات ترمینالی بیلد پروداکشن در تب‌های چندسکویی قرار گیرند. diff --git a/chapters/11-security-and-best-practices/02-lesson-secrets-and-api-keys-management/spec.md b/chapters/11-security-and-best-practices/02-lesson-secrets-and-api-keys-management/spec.md new file mode 100644 index 0000000..e0eb9d1 --- /dev/null +++ b/chapters/11-security-and-best-practices/02-lesson-secrets-and-api-keys-management/spec.md @@ -0,0 +1,117 @@ +# مشخصات درس‌نامه: مدیریت Secretها، کلیدهای API و واکنش اضطراری به نشت اطلاعات +- **شناسه در سیلابس:** `L11.3` +- **فصل:** فصل ۱۱: امنیت و استفاده مسئولانه (Ch 11) +- **نوع محتوا:** 📘 درس‌نامه متنی +- **زمان تقریبی مطالعه:** ۱۸ دقیقه +- **پیش‌نیازهای مستقیم:** `L11.2` (چک‌لیست پیش از انتشار) + +--- + +## ۱. اهداف یادگیری (Learning Objectives - Bloom's Taxonomy) +دانشجو پس از مطالعهٔ این درس‌نامه باید بتواند: +- [ ] **درک کند (Understand):** چرا نشت کلیدهای API در گیت‌هاب کابوس شماره یک توسعه‌دهندگان است و چرا ایجنت‌های هوش مصنوعی مستعد هاردکد کردن تصادفی توکن‌ها در کلاینت هستند. +- [ ] **تحلیل/ارزیابی کند (Evaluate):** تفاوت پاک کردن یک فایل در کامیت جدید را با پاک کردن کامل آن از تاریخچه عمیق گیت (Git History) درک کرده و ضرورت باطل‌سازی فوری کلیدها را ارزیابی نماید. +- [ ] **به‌کار ببندد (Apply):** پروتکل ۳ مرحله‌ای واکنش به حادثه امنیتی نشت کلید (Incident Response: باطل‌سازی در پنل $\rightarrow$ صدور کلید جدید $\rightarrow$ پاک‌سازی تاریخچه با ابزارهای خودکار) را اجرا کند. +- [ ] **ایجاد کند (Create):** یک پرامپت بازرسی امنیتی برای اسکن تمام فایل‌های پروژه تنظیم کند تا ایجنت هرگونه کلید مشکوک، توکن هاردکد شده یا متغیر کلاینتی ناامن را کشف و ایزوله کند. + +--- + +## ۲. محدوده و مرزهای محتوا (Scope & Boundaries) + +### آنچه باید پوشش داده شود (In-Scope): +1. **کابوس نشت کلید: واقعیتی تلخ در دنیای وایب کدینگ:** + * چرا هوش مصنوعی گاهی برای سریع‌تر کار کردن، مقادیر کلیدها را مستقیماً داخل کدهای React می‌گذارد؟ + * سرعت باورنکردنی ربات‌های اسکنر: رصد مداوم خروجی گیت‌هاب و خالی کردن شارژ در عرض چند ثانیه. +2. **سپرهای پیشگیرانه پیش از ارسال کد به گیت‌هاب:** + * فعال‌سازی قابلیت رایگان GitHub Push Protection (مسدودسازی خودکار پوش در صورت شناسایی کلید). + * چک‌لیست بازرسی نهایی فایل `.gitignore` برای اطمینان از قرار گرفتن `.env*`. +3. **پروتکل واکنش اضطراری به حادثه امنیتی (Emergency Protocol):** + * سناریو: «همین الان ناخواسته فایل `.env.local` را روی گیت‌هاب پوش کردم! چه کنم؟» + * گام اول (بسیار فوری): متوقف کردن وحشت و ورود به پنل ارائه‌دهنده (OpenRouter, Supabase, Kavenegar) و زدن دکمه Revoke / Delete Key (باطل کردن کلید در کمتر از ۱ دقیقه). + * گام دوم: ساخت کلید جدید و جایگزینی آن در فایل محلی. + * گام سوم: چرا کامیت کردن حذف فایل کافی نیست؟ آموزش پاک کردن تاریخچه با کامندهای استاندارد. +4. **چرخش دوره‌ای کلیدها (Secret Rotation):** + * استراتژی تعویض دوره‌ای کلیدهای حساس برای حفظ حداکثر امنیت در طول زمان. +5. **دستورات چندسکویی برای بررسی سریع تاریخچه و فایل‌های پیگیری‌شده:** + * دستورات گیت برای بررسی اینکه آیا فایلی از نوع `.env` ردیابی شده است یا خیر در سه سیستم‌عامل. +6. **کال‌اوت‌های آموزشی و هشدار کوئرا:** + * کال‌اوت بنفش (`
`): نحوه کار ربات‌های ماینر و اسکرپرهای اختصاصی که کلیدهای OpenAI و کلاد را هدف می‌گیرند. + * کال‌اوت سبز (`
`): فعال بودن پیش‌فرض GitHub Secret Scanning در مخازن عمومی. + * کال‌اوت قرمز (`
`): اشتباه مرگبار؛ زدن `git rm .env` و پوش کردن مجدد، کلید را از کامیت‌های قبلی پاک نمی‌کند! تاریخچه گیت ابدی است مگر اینکه بازنویسی شود. + +### آنچه نباید وارد آن شویم (Out-of-Scope): +- استفاده از سیستم‌های سازمانی گاوصندوق سخت‌افزاری مانند HashiCorp Vault یا AWS KMS. +- مباحث کریپتوگرافی و الگوریتم‌های رمزنگاری متقارن/نامتقارن. + +--- + +## ۳. مفاهیم کلیدی و کلمات تخصصی (Key Concepts & Terms) + +| اصطلاح انگلیسی | معادل فارسی مصوب | توضیح یک‌خطی ساده | +| :--- | :--- | :--- | +| Secret Leak | نشت اطلاعات محرمانه | حادثه امنیتی فاش شدن کلیدهای دسترسی، رمزها یا توکن‌ها در مخزن کدهای عمومی | +| Key Revocation | ابطال فوری کلید | غیرفعال‌سازی آنی کلید از پنل شرکت ارائه‌دهنده برای بی‌اثر کردن دسترسی نفوذگران | +| Push Protection | محافظت در برابر پوش ناامن | قابلیتی در گیت‌هاب که با شناسایی توکن‌ها مانع از ارسال کامیت حاوی رمز می‌شود | +| Secret Rotation | چرخش دوره‌ای کلیدها | رویه استاندارد تعویض و صدور مجدد کلیدهای دسترسی در بازه‌های زمانی مشخص | +| Hardcoded Credentials | اطلاعات هویتی هاردکد شده | نوشتن مستقیم رمز یا توکن در میان خطوط کد به جای خواندن امن آن از متغیرهای محیطی | + +--- + +## ۴. جایگاه‌های تصاویر و نمودارها (Visual & Diagram Placeholders) +> **راهنمای ایجنت نویسنده:** تمام تصاویر باید در پوشهٔ `images/` ذخیره شده و در جدول تک‌خانه‌ای وسط‌چین درج شوند: + +1. **تصویر کاور درس:** `images/cover.png` + * **موضوع:** زنگ خطر قرمز امنیتی که کلید شکسته شده‌ای را هشدار می‌دهد و یک دست دیجیتال کلید را ابطال و کلید جدید جایگزین می‌کند. +2. **سرعت ربات‌های شکارچی کلید در گیت‌هاب:** `images/github-bot-scraping-speed.png` + * **موضوع:** اینفوگرافیک تایم‌لاین: ثانیه ۱: کامیت اشتباه $\rightarrow$ ثانیه ۳: اسکن توسط ربات نفوذگر $\rightarrow$ ثانیه ۱۰: مصرف اعتبار و ساخت ماشین مجازی غیرمجاز. +3. **پروتکل ۳ مرحله‌ای نجات در زمان نشت اطلاعات:** `images/incident-response-flow.png` + * **موضوع:** فلوچارت امداد فوری: ۱) باطل‌سازی آنی در پنل ارائه‌دهنده $\rightarrow$ ۲) صدور کلید جدید $\rightarrow$ ۳) بازنویسی تاریخچه گیت. +4. **پیام هشدار GitHub Push Protection در ترمینال:** `images/github-push-protection-alert.png` + * **موضوع:** اسکرین‌شات از مسدود شدن `git push` در ترمینال توسط گیت‌هاب به دلیل وجود کلید مشکوک. + +--- + +## ۵. بخش‌بندی و ساختار محتوایی پیشنهادی درس‌نامه (`README.md`) + +1. **تیتر اصلی:** `# مدیریت Secretها، کلیدهای API و واکنش اضطراری به نشت اطلاعات` +2. **مقدمه:** فاجعه‌ای که در ۳ ثانیه رخ می‌دهد: داستان تلخ برنامه‌نویسانی که بخاطر یک پوش اشتباه، چند هزار دلار بدهی بالا آوردند! +3. **جدول کاور درس** +4. **چرا ایجنت‌های هوش مصنوعی مستعد لو دادن کلیدها هستند؟** + * خطای شایع قرار دادن کلیدها داخل فایل‌های کامپوننت یا ساختن فایل‌های کانفیگ بدون `.gitignore`. +5. **آزمایشگاه بازرسی پروژه پورتفولیو: شکار کلیدهای هاردکد شده:** + * جستجوی عباراتی نظیر `sk-`, `eyJh`, `api_key` در سرتاسر کدهای پروژه. +6. **سپر دفاعی اول: فعال‌سازی Push Protection در گیت‌هاب:** + * تنظیمات رایگان مخزن در گیت‌هاب برای سد کردن راه پوش‌های خطرناک. +7. **پروتکل اتاق فرمان در زمان بحران (کارهایی که در ۳ دقیقه اول باید انجام دهید):** + * گام ۱: ابطال فوری در پنل سوپابیس، کاوه‌نگار یا OpenRouter. + * گام ۲: تولید کلید جایگزین. + * گام ۳: پاک کردن ردپای فایل از تاریخچه گیت با ابزار `git filter-repo`. +8. **جعبه پرامپت طلایی: اسکن امنیتی کل کدهای پروژه با ایجنت:** + * پرامپت دقیق: + > «تمام فایل‌های پروژه من را اسکن کن. بررسی کن که آیا هیچ کلید API، رمز عبور یا توکن هاردکد شده‌ای داخل کدهای فرانت‌اند یا کامپوننت‌های کلاینت وجود دارد یا خیر. همچنین بررسی کن که متغیرهای حاوی اطلاعات محرمانه تصادفاً پیشوند `NEXT_PUBLIC_` نگرفته باشند و گزارش کاملی از موارد مشکوک به همراه راهکار اصلاح ارائه بده.» +9. **دستورات چندسکویی بررسی وضعیت فایل‌های ردیابی‌شده در گیت:** + * منوی کشویی سه‌گانه برای ویندوز، مک و لینوکس: + - Windows (PowerShell): + ```powershell + git ls-files | Select-String "\.env" + ``` + - macOS (Terminal): + ```bash + git ls-files | grep "\.env" + ``` + - Linux (Bash): + ```bash + git ls-files | grep "\.env" + ``` +10. **باکس نکته Quera (`
`):** چرا سطل زباله گیت پاک نمی‌شود؟ مفهوم Commit Tree و دلایل باقی ماندن دیتا در تاریخچه حتی پس از حذف فایل. +11. **باکس هشدار Quera (`
`):** هرگز کلید سوپابیس `service_role` را در پروژه‌های فرانت‌اند استفاده نکنید؛ این کلید شاه‌کلید تمام دیتابیس است! +12. **باکس رضایت‌بخش Quera (`
`):** اجرای موفق اسکن امنیتی و اطمینان از اینکه هیچ کلیدی در کدهای گیت جا نمانده است. +13. **جمع‌بندی درس‌نامه:** ایمن‌سازی کامل کلیدها؛ ورود به لایه بعدی دفاع: احراز هویت و کنترل دسترسی پیشرفته (Auth & RBAC) در درس بعدی. + +--- + +## ۶. معیارهای پذیرش (Acceptance Criteria for Reviewer) +- [ ] خطرات نشت کلید و سرعت ربات‌های اسکنر به زبان شفاف بیان شود. +- [ ] پروتکل گام‌به‌گام واکنش اضطراری به نشت کلید ارائه گردد. +- [ ] روش‌های پیشگیری نظیر GitHub Push Protection و بررسی `.gitignore` تشریح شود. +- [ ] پرامپت ممیزی امنیتی پروژه توسط ایجنت در متن گنجانده شود. diff --git a/chapters/11-security-and-best-practices/03-lesson-auth-and-access-control/spec.md b/chapters/11-security-and-best-practices/03-lesson-auth-and-access-control/spec.md new file mode 100644 index 0000000..db85b34 --- /dev/null +++ b/chapters/11-security-and-best-practices/03-lesson-auth-and-access-control/spec.md @@ -0,0 +1,121 @@ +# مشخصات درس‌نامه: احراز هویت و کنترل دسترسی (Auth & Access)؛ تفکیک نقش‌ها و محافظت از روت‌ها +- **شناسه در سیلابس:** `L11.4` +- **فصل:** فصل ۱۱: امنیت و استفاده مسئولانه (Ch 11) +- **نوع محتوا:** 📘 درس‌نامه متنی +- **زمان تقریبی مطالعه:** ۱۸ دقیقه +- **پیش‌نیازهای مستقیم:** `L11.3` (مدیریت Secretها و کلیدهای API) + +--- + +## ۱. اهداف یادگیری (Learning Objectives - Bloom's Taxonomy) +دانشجو پس از مطالعهٔ این درس‌نامه باید بتواند: +- [ ] **درک کند (Understand):** تفاوت بنیادین میان «احراز هویت» (Authentication: تو کیستی؟) و «مجوز دسترسی» (Authorization: اجازه انجام چه کاری داری؟) را شرح دهد. +- [ ] **تحلیل/ارزیابی کند (Evaluate):** آسیب‌پذیری مهلک اعتماد به ظاهر رابط کاربری (مخفی کردن دکمه حذف بدون بررسی سرور) را ارزیابی کرده و خطرات حملات IDOR / BOLA را بشناسد. +- [ ] **به‌کار ببندد (Apply):** سامانه کنترل دسترسی مبتنی بر نقش (Role-Based Access Control - RBAC) را در پورتفولیو پیاده کند تا فقط ایمیل اختصاصی ادمین به بخش‌های ویرایش و پنل سئو دسترسی داشته باشد. +- [ ] **ایجاد کند (Create):** یک میدل‌ویر مستحکم در Next.js (`middleware.ts`) به همراه گیت‌های امنیتی در تمام Server Actionها بسازد که درخواست‌های غیرمجاز مستقیم cURL را در نطفه خفه کند. + +--- + +## ۲. محدوده و مرزهای محتوا (Scope & Boundaries) + +### آنچه باید پوشش داده شود (In-Scope): +1. **داستان مسافری که کارت سوار شدن داشت اما به کابین خلبان رفت!** + * چرا صرف لاگین کردن با گیت‌هاب نباید به یک کاربر اجازه حذف پروژه‌های شما را بدهد؟ +2. **کالبدشکافی تفاوت AuthN در برابر AuthZ:** + * Authentication (هویت‌سنجی): کاربر ثابت می‌کند خودش است (ورود با رمز یا OAuth). + * Authorization (سطح دسترسی): سیستم تصمیم می‌گیرد که آیا این کاربر اجازه حذف، ویرایش یا مشاهده دارد یا خیر. +3. **آسیب‌پذیری کلاسیک: مخفی کردن دکمه در فرانت‌اند بدون گیت سرور:** + * نوشتن شرط `{isAdmin && }` در ظاهر زیباست، اما نفوذگر با یک درخواست ساده شبکه (`fetch` یا cURL) اندپوینت را صدا می‌زند! +4. **پیاده‌سازی دو لایه دفاعی در Next.js:** + * لایه اول: میدل‌ویر لبه (`middleware.ts`) برای هدایت سریع کاربران عادی از مسیر `/admin/*` به صفحه لاگین. + * لایه دوم: گارد سرور اکشن (Server Action Guard) در ابتدای تمام توابع ایجاد، ویرایش و حذف پروژه: + ```typescript + const { data: { user } } = await supabase.auth.getUser(); + if (!user || user.email !== process.env.ADMIN_EMAIL) { + throw new Error("دسترسی غیرمجاز: شما ادمین نیستید!"); + } + ``` +5. **معماری نقش‌ها (RBAC) در پروژه پورتفولیو:** + * نقش `admin`: دسترسی کامل به ویرایش پورتفولیو، تغییرات سئو و مشاهده تراکنش‌ها. + * نقش `user`: مشاهده وضعیت رزروهای مشاوره خود. + * نقش `visitor`: مشاهده پروژه‌های عمومی و ارسال پیام در فرم تماس. +6. **کال‌اوت‌های آموزشی و هشدار کوئرا:** + * کال‌اوت بنفش (`
`): آسیب‌پذیری IDOR (Insecure Direct Object References)؛ وقتی کاربر با تغییر شناسه در آدرس (`/orders/42` به `/orders/43`) سفارش دیگری را می‌بیند! + * کال‌اوت سبز (`
`): سرعت خارق‌العاده Next.js Edge Middleware که قبل از لود شدن کامپوننت، دسترسی را اعتبارسنجی می‌کند. + * کال‌اوت قرمز (`
`): هرگز به متغیرهای کلاینتی برای تشخیص ادمین بودن اعتماد نکنید؛ همه چیز در فرانت‌اند قابل دستکاری در Console است. + +### آنچه نباید وارد آن شویم (Out-of-Scope): +- ساختارهای سازمانی پیچیده Multi-tenant با ده‌ها گروه کاربری. +- استانداردهای اداری انطباق SOC2 و HIPAA. + +--- + +## ۳. مفاهیم کلیدی و کلمات تخصصی (Key Concepts & Terms) + +| اصطلاح انگلیسی | معادل فارسی مصوب | توضیح یک‌خطی ساده | +| :--- | :--- | :--- | +| Authentication (AuthN) | احراز هویت | فرآیند راستی‌آزمایی و اثبات هویت ادعاشده توسط یک کاربر در سیستم | +| Authorization (AuthZ) | کنترل و تفویض دسترسی | فرآیند تعیین اینکه کاربر احراز هویت شده مجاز به دسترسی به چه منابعی است | +| RBAC | کنترل دسترسی مبتنی بر نقش | مدل امنیتی که دسترسی‌ها را بر اساس نقش‌های تعریف‌شده (ادمین، کاربر عادی) اعطا می‌کند | +| Middleware Guard | نگهبان لایه میانی | کدی که پیش از رسیدن درخواست به صفحات، توکن و وضعیت دسترسی را بررسی و فیلتر می‌کند | +| IDOR / BOLA | ارجاع مستقیم ناامن به شیء | باگ امنیتی که به کاربر اجازه می‌دهد با دستکاری شناسه عددی، داده‌های دیگران را مشاهده یا ویرایش کند | +| Client-Side Security Fallacy | توهم امنیت در کلاینت | باور غلط مبنی بر اینکه مخفی کردن یک دکمه یا صفحه در مرورگر مانع هک شدن آن می‌شود | + +--- + +## ۴. جایگاه‌های تصاویر و نمودارها (Visual & Diagram Placeholders) +> **راهنمای ایجنت نویسنده:** تمام تصاویر باید در پوشهٔ `images/` ذخیره شده و در جدول تک‌خانه‌ای وسط‌چین درج شوند: + +1. **تصویر کاور درس:** `images/cover.png` + * **موضوع:** گیت بازرسی امنیتی نئونی با دو درب مجزا: یکی تایید چهره (هویت) و دیگری اسکن اثر انگشت اتاق فرمان (دسترسی ادمین). +2. **تفاوت مفهومی هویت در برابر مجوز دسترسی:** `images/authn-vs-authz-diagram.png` + * **موضوع:** اینفوگرافیک مقایسه‌ای: کارت پرواز (شما مسافر این هواپیمایی هستید) در برابر مجوز ورود به کابین خلبان (فقط کادر پرواز). +3. **جریان محافظت دو لایه از روت‌های پنل مدیریت:** `images/two-layer-route-protection.png` + * **موضوع:** فلوچارت امنیتی: درخواست کاربر $\rightarrow$ لایه ۱: میدل‌ویر مسیر `/admin` $\rightarrow$ لایه ۲: گارد اعتبارسنجی ادمین داخل Server Action $\rightarrow$ تغییر در دیتابیس. +4. **تله امنیتی پنهان‌سازی ظاهری دکمه‌ها:** `images/client-side-hidden-button-trap.png` + * **موضوع:** کاریکاتور نفوذگری که از پنجره پشت سرور دکمه حذف را با دستور cURL صدا می‌زند در حالی که در ظاهر سایت دکمه مخفی شده است. + +--- + +## ۵. بخش‌بندی و ساختار محتوایی پیشنهادی درس‌نامه (`README.md`) + +1. **تیتر اصلی:** `# احراز هویت و کنترل دسترسی (Auth & Access)؛ تفکیک نقش‌ها و محافظت از روت‌ها` +2. **مقدمه:** چرا هر کاربری که وارد سایت می‌شود نباید بتواند پروژه‌های شما را پاک کند و تفاوت حیاتی کیستی و دسترسی چیست؟ +3. **جدول کاور درس** +4. **استعاره مهمان هتل و کلید مستر مدیر:** + * همه مسافران هتل کلید دارند، اما فقط مدیر می‌تواند درب انبار و گاوصندوق را باز کند. +5. **توهم خطرناک امنیت در فرانت‌اند (Security through Obscurity):** + * چرا مخفی کردن لینک `/admin` در منو، امنیتی در حد قرار دادن کلید خانه زیر پادری است! +6. **پیاده‌سازی سپر دفاعی اول: میدل‌ویر Next.js (`middleware.ts`):** + * کد تمیز خواندن سشن سوپابیس و فیلتر کردن روت‌های حساس. +7. **پیاده‌سازی سپر دفاعی دوم: گیت‌های احراز هویت داخل Server Actions:** + * نوشتن تابع کمکی `verifyAdminSession()` و فراخوانی آن در ابتدای تمام عملیات‌های جهش داده (Mutations). +8. **جعبه پرامپت طلایی: امن‌سازی تمام روت‌ها و اکشن‌ها با ایجنت:** + * پرامپت دقیق: + > «تمام Server Actionها و Route Handlerهای پروژه پورتفولیو را بازبینی کن. مطمئن شو که در ابتدای هر تابعی که داده‌ای را در دیتابیس تغییر می‌دهد، هویت کاربر بررسی شود و تنها در صورتی که ایمیل کاربر با `ADMIN_EMAIL` مطابقت داشته باشد اجازه ادامه داده شود. در غیر این صورت یک خطای ۴۰۱ یا ۴۰۳ استاندارد صادر کن.» +9. **دستورات چندسکویی برای تعریف ایمیل ادمین در متغیرهای محیطی:** + * منوی کشویی سه‌گانه برای ویندوز، مک و لینوکس: + - Windows (PowerShell): + ```powershell + Add-Content .env.local "`nADMIN_EMAIL=your-secure-email@gmail.com" + ``` + - macOS (Terminal): + ```bash + echo "ADMIN_EMAIL=your-secure-email@gmail.com" >> .env.local + ``` + - Linux (Bash): + ```bash + echo "ADMIN_EMAIL=your-secure-email@gmail.com" >> .env.local + ``` +10. **باکس نکته Quera (`
`):** ماجرای باگ وحشتناک IDOR؛ چطور بررسی نکردن مالکیت رکوردها به هکرها اجازه دیدن فاکتورهای سایرین را می‌دهد. +11. **باکس هشدار Quera (`
`):** هرگز از `localStorage` برای ذخیره کردن نقش کاربر (`role: admin`) استفاده نکنید؛ هر کاربر می‌تواند با کلید F12 این مقدار را تغییر دهد! +12. **باکس رضایت‌بخش Quera (`
`):** امتحان لاگین با یک اکانت دیگر و مشاهده پیام مسدود شدن دسترسی در پنل ادمین. +13. **جمع‌بندی درس‌نامه:** مجهز شدن به سیستم دفاعی ضد نفوذ دسترسی؛ ورود به حوزه اعتبارسنجی ورودی‌ها با Zod و مقابله با حملات XSS در درس بعدی. + +--- + +## ۶. معیارهای پذیرش (Acceptance Criteria for Reviewer) +- [ ] تفاوت مفهومی و کاربردی Authentication و Authorization تبیین گردد. +- [ ] استراتژی دو لایه محافظت (میدل‌ویر + گیت سرور اکشن) پیاده‌سازی و تشریح شود. +- [ ] باگ امنیتی پنهان‌سازی ظاهری دکمه‌ها و خطر IDOR به شکل ملموس توضیح داده شود. +- [ ] پرامپت ایمن‌سازی اکشن‌ها برای ایجنت به همراه کدهای استاندارد ارائه گردد. diff --git a/chapters/11-security-and-best-practices/04-lesson-input-validation-and-xss-defense/spec.md b/chapters/11-security-and-best-practices/04-lesson-input-validation-and-xss-defense/spec.md new file mode 100644 index 0000000..fc8e498 --- /dev/null +++ b/chapters/11-security-and-best-practices/04-lesson-input-validation-and-xss-defense/spec.md @@ -0,0 +1,127 @@ +# مشخصات درس‌نامه: اعتبارسنجی همه‌جانبه ورودی‌ها با Zod و مقابله با حملات XSS +- **شناسه در سیلابس:** `L11.5` +- **فصل:** فصل ۱۱: امنیت و استفاده مسئولانه (Ch 11) +- **نوع محتوا:** 📘 درس‌نامه متنی +- **زمان تقریبی مطالعه:** ۱۸ دقیقه +- **پیش‌نیازهای مستقیم:** `L11.4` (احراز هویت و کنترل دسترسی) + +--- + +## ۱. اهداف یادگیری (Learning Objectives - Bloom's Taxonomy) +دانشجو پس از مطالعهٔ این درس‌نامه باید بتواند: +- [ ] **درک کند (Understand):** قانون طلایی امنیت «هرگز به ورودی‌های کاربر اعتماد نکن» (Never Trust User Input) را تحلیل کرده و چرایی ناکافی بودن اعتبارسنجی سمت کاربر را درک کند. +- [ ] **تحلیل/ارزیابی کند (Evaluate):** نحوه عملکرد حملات تزریق اسکریپت (Cross-Site Scripting - XSS) و تفاوت فرار خودکار کاراکترها در React را با خطرات ویژگی مرگبار `dangerouslySetInnerHTML` ارزیابی کند. +- [ ] **به‌کار ببندد (Apply):** کتابخانه استاندارد **Zod** را برای اعتبارسنجی ساختارمند فرم‌های پورتفولیو (فرم تماس، فرم رزرو مشاوره و فرم تنظیمات سئو) در لایه سرور پیاده‌سازی نماید. +- [ ] **ایجاد کند (Create):** یک اسکیمای جامع Zod بسازد که خطاهای ورودی را به زبان فارسی روان استخراج کرده و به کلاینت بازگرداند تا هم تجربه کاربری عالی و هم امنیت تضمین شود. + +--- + +## ۲. محدوده و مرزهای محتوا (Scope & Boundaries) + +### آنچه باید پوشش داده شود (In-Scope): +1. **قانون بنیادین امنیت وب: «تمام کاربران مشکوک هستند مگر خلافش ثابت شود!»:** + * چرا حتی یک فرم ساده تماس می‌تواند با ورودی‌های چند مگابایتی یا کدهای جاوااسکریپت مخرب، سیستم را فلج کند؟ +2. **کالبدشکافی اعتبارسنجی دوگانه (Dual-layer Validation):** + * اعتبارسنجی فرانت‌اند: صرفاً برای تجربه کاربری نرم (UX) و جلوگیری از کلیک‌های بیهوده. + * اعتبارسنجی بک‌اند (سرور اکشن): سد نفوذناپذیر واقعی؛ چون هر کسی می‌تواند بدون باز کردن سایت، با دستور cURL دیتا بفرستد. +3. **معرفی کتابخانه مقتدر Zod در TypeScript:** + * تعریف اسکیما (Schema) برای فرم تماس: + ```typescript + import { z } from "zod"; + export const ContactSchema = z.object({ + name: z.string().min(2, "نام باید حداقل ۲ حرف باشد").max(50), + email: z.string().email("فرمت ایمیل نامعتبر است"), + phone: z.string().regex(/^09\d{9}$/, "شماره موبایل باید با ۰۹ شروع شده و ۱۱ رقم باشد"), + message: z.string().min(10, "پیام باید حداقل ۱۰ کاراکتر باشد").max(1000), + }); + ``` + * استفاده از `safeParse()` در Server Action برای مدیریت تمیز خطاها بدون کرش کردن سرور. +4. **کالبدشکافی حملات XSS (Cross-Site Scripting):** + * حمله چیست؟ نفوذگر در فیلد پیام می‌نویسد: ``. + * اگر این پیام در پنل ادمین بدون ضدعفونی رندر شود، توکن ادمین در یک میلی‌ثانیه سرقت می‌شود! +5. **سپر دفاعی React در برابر XSS:** + * چگونه React به صورت خودکار کاراکترهای خطرناک مانند `<` و `>` را به کاراکترهای بی‌خطر متنی (Entity Escaping) تبدیل می‌کند. + * چرا ویژگی `dangerouslySetInnerHTML` نام «خطرناک» را یدک می‌کشد و چه زمانی باید از `DOMPurify` استفاده کرد. +6. **دستورات چندسکویی برای نصب Zod:** + * نصب در منوهای کشویی ویندوز، مک و لینوکس: `npm install zod`. +7. **کال‌اوت‌های آموزشی و هشدار کوئرا:** + * کال‌اوت بنفش (`
`): استخراج خودکار تایپ‌های تایپ‌اسکریپت از اسکیما با `z.infer` (همگام‌سازی ابدی کد و اعتبارسنجی). + * کال‌اوت سبز (`
`): اعتبارسنجی یکپارچه با نمایش پیام‌های خطای فارسی درست زیر فیلدها. + * کال‌اوت قرمز (`
`): هرگز متنی را که کاربر فرستاده مستقیماً داخل تابع `eval()` یا ویژگی `dangerouslySetInnerHTML` قرار ندهید. + +### آنچه نباید وارد آن شویم (Out-of-Scope): +- مباحث پیچیده Content Security Policy (CSP) در لایه وب‌سرورهای Nginx. +- اعتبارسنجی فرمت فایل‌های باینری و تصاویر (در درس بعدی، ۱۱.۶، به صورت عمیق بررسی می‌شود). + +--- + +## ۳. مفاهیم کلیدی و کلمات تخصصی (Key Concepts & Terms) + +| اصطلاح انگلیسی | معادل فارسی مصوب | توضیح یک‌خطی ساده | +| :--- | :--- | :--- | +| Input Validation | اعتبارسنجی ورودی‌ها | سنجش انطباق داده‌های ارسالی کاربر با فرمت، طول و قوانین امنیتی از پیش تعیین‌شده | +| XSS (Cross-Site Scripting) | اسکریپت‌نویسی بین‌سایتی | حمله سایبری ناشی از تزریق کدهای جاوااسکریپت خرابکار به صفحات و اجرای آن در مرورگر سایر کاربران | +| Zod | کتابخانه اسکیمای زد | ابزار محبوب ساخت و اعتبارسنجی تایپ‌سیف اسکیمای داده‌ها در محیط تایپ‌اسکریپت | +| Sanitization | ضدعفونی داده‌ها | پاک‌سازی تگ‌ها و کاراکترهای بالقوه خطرناک از متن ورودی پیش از ذخیره در دیتابیس | +| Character Escaping | فرار کاراکترها | تبدیل خودکار نمادهای معنادار HTML (مانند < و >) به کدهای نمایشی متنی برای خنثی‌سازی اسکریپت‌ها | +| Stored XSS | اسکریپت‌نویسی ماندگار | خطرناک‌ترین نوع XSS که در آن کد مخرب در دیتابیس ذخیره شده و برای تمام بازدیدکنندگان بعدی اجرا می‌شود | + +--- + +## ۴. جایگاه‌های تصاویر و نمودارها (Visual & Diagram Placeholders) +> **راهنمای ایجنت نویسنده:** تمام تصاویر باید در پوشهٔ `images/` ذخیره شده و در جدول تک‌خانه‌ای وسط‌چین درج شوند: + +1. **تصویر کاور درس:** `images/cover.png` + * **موضوع:** فیلتر تصفیه نئونی درخشان که ورودی‌های فرم را اسکن کرده و نمادهای اسکریپت و بدافزار قرمز را به کلمات سبز و ایمن تبدیل می‌کند. +2. **سازوکار حمله Stored XSS در پنل ادمین:** `images/stored-xss-attack-flow.png` + * **موضوع:** اینفوگرافیک حمله: نفوذگر کد جاوااسکریپت تزریق می‌کند $\rightarrow$ در دیتابیس ذخیره می‌شود $\rightarrow$ ادمین پیام را باز می‌کند $\rightarrow$ اسکریپت در مرورگر ادمین اجرا شده و کوکی را سرقت می‌کند. +3. **معماری اعتبارسنجی لایه سرور با Zod:** `images/zod-validation-flow.png` + * **موضوع:** فلوچارت: دریافت دیتا $\rightarrow$ ارزیابی با اسکیما $\rightarrow$ در صورت خطا: بازگشت پیام فارسی $\rightarrow$ در صورت تایید: اجرای اکشن و ذخیره امن. +4. **نمایش پیام‌های خطای اعتبارسنجی فارسی در فرم:** `images/persian-zod-error-feedback-ui.png` + * **موضوع:** اسکرین‌شات از فرم تماس با حاشیه‌های قرمز زیبا و هشدارهای دقیق فارسی زیر هر اینپوت. + +--- + +## ۵. بخش‌بندی و ساختار محتوایی پیشنهادی درس‌نامه (`README.md`) + +1. **تیتر اصلی:** `# اعتبارسنجی همه‌جانبه ورودی‌ها با Zod و مقابله با حملات XSS` +2. **مقدمه:** اگر به آب لوله‌کشی شهر بدون تصفیه‌خانه اعتماد ندارید، چرا باید به ورودی‌های کیبورد غریبه‌ها در اینترنت اعتماد کنید؟ +3. **جدول کاور درس** +4. **استعاره گیت بازرسی فرودگاه:** + * بازرسی اشعه ایکس چمدان‌ها قبل از ورود به هواپیما؛ حذف سلاح‌ها و مواد اشتعال‌زا (کدهای مخرب). +5. **کالبدشکافی یک حمله واقعی XSS در پروژه پورتفولیو:** + * نوشتن تگ `