12 KiB
12 KiB
مشخصات درسنامه: امنیت دیتابیس (RLS) و پروتکل امن آپلود فایل در Supabase Storage
- شناسه در سیلابس:
L11.6 - فصل: فصل ۱۱: امنیت و استفاده مسئولانه (Ch 11)
- نوع محتوا: 📘 درسنامه متنی
- زمان تقریبی مطالعه: ۱۸ دقیقه
- پیشنیازهای مستقیم:
L11.5(اعتبارسنجی همهجانبه ورودیها با Zod)
۱. اهداف یادگیری (Learning Objectives - Bloom's Taxonomy)
دانشجو پس از مطالعهٔ این درسنامه باید بتواند:
- درک کند (Understand): چرا دریافت فایل از کاربر حساسترین و خطرناکترین قابلیت در هر وباپلیکیشن است و چگونه فایلهای مخرب میتوانند کل سرور یا کلاینتها را آلوده کنند.
- تحلیل/ارزیابی کند (Evaluate): خطرات امنیتی جعل پسوند فایل، حملات پیمایش مسیر (Path Traversal)، بمبهای حجمی (Zip Bombs)، و اسکریپتهای پنهانشده در تصاویر SVG را ارزیابی کند.
- بهکار ببندد (Apply): باکتهای ذخیرهسازی ابری در Supabase Storage را با اعمال محدودیت حجم (حداکثر ۵ مگابایت)، لیست سفید پسوندها (MIME Types) و سیاستهای کنترل دسترسی (Storage RLS) ایمنسازی نماید.
- ایجاد کند (Create): یک تابع آپلود تصویر پروژه بسازد که نام فایل را با استفاده از UUID تصادفی بازنویسی کند تا خطر بازنویسی فایلهای سرور و تزریق مسیر به صفر برسد.
۲. محدوده و مرزهای محتوا (Scope & Boundaries)
آنچه باید پوشش داده شود (In-Scope):
- آسیبپذیریهای کشنده در ماژول آپلود فایل:
- آپلود بدافزارها و فایلهای اجرایی تحت نامهای جعلی (مثلاً
shell.php.pngیا فایلی با اسکریپت اجرایی). - خطر پنهان تصاویر SVG: از آنجا که SVG یک کد متنی XML است، میتواند تگهای
<script>حاوی XSS ماندگار را در خود پنهان کند! - حملات پر کردن دیسک و تحمیل هزینههای سنگین ابری با آپلود فایلهای چندصد مگابایتی.
- آپلود بدافزارها و فایلهای اجرایی تحت نامهای جعلی (مثلاً
- پروتکل ۴ لایه برای آپلود امن در پروژه پورتفولیو:
- لایه ۱: اعتبارسنجی نوع فایل (MIME Type Whitelist): پذیرش انحصاری
image/jpeg،image/png،image/webpوapplication/pdf. - لایه ۲: محدودسازی سفتوسخت حجم (File Size Limit): مسدود کردن فایلهای بالاتر از ۵ مگابایت در فرانتاند و در لایه سرور.
- لایه ۳: پاکسازی نام فایل و جایگزینی با UUID تصادفی: تبدیل
my-resume.pdfبهf47ac10b-58cc-4372-a567-0e02b2c3d479.pdfبرای جلوگیری از Path Traversal (../../). - لایه ۴: سیاستهای امنیتی باکت در Supabase (Storage Policies): خواندن عکسها برای عموم آزاد (
SELECT)، اما افزودن یا حذف عکسها فقط برای کاربر ادمین احراز هویت شده مجاز است.
- لایه ۱: اعتبارسنجی نوع فایل (MIME Type Whitelist): پذیرش انحصاری
- بازبینی امنیت دیتابیس (SQL Injection و RLS):
- چرا استفاده از متدهای رسمی Supabase SDK شما را به صورت پیشفرض در برابر SQL Injection ایمن میکند (Parameterized Queries).
- چکلیست نهایی اطمینان از روشن بودن RLS روی تمام جداول دیتابیس (
projects,site_settings,consultation_bookings).
- جعبه پرامپت طلایی: ساخت ماژول آپلود امن با ایجنت:
- پرامپت ایجاد کامپوننت آپلود با پیشنمایش، اعتبارسنجی سایز، و ذخیره در باکت Supabase.
- کالاوتهای آموزشی و هشدار کوئرا:
- کالاوت بنفش (
<details class="violet">): حمله پیمایش دایرکتوری (Path Traversal Attack) و چگونگی نفوذ خرابکاران با نام فایلهایی مثل../../etc/passwd. - کالاوت سبز (
<details class="green">): تبدیل خودکار عکسها به فرمت مدرن WebP با کتابخانه Next.js برای کاهش حجم تا ۷۰٪. - کالاوت قرمز (
<details class="red">): خطر آپلود SVG توسط کاربران غریبه؛ هرگز باکت عمومی را بدون اعتبارسنجی به روی فایلهای SVG باز نگذارید.
- کالاوت بنفش (
آنچه نباید وارد آن شویم (Out-of-Scope):
- راهاندازی آنتیویروسهای کلاود مانند ClamAV برای اسکن باینری.
- مدیریت دیسکهای فیزیکی سرورهای خودمیزبان (Self-hosted NFS).
۳. مفاهیم کلیدی و کلمات تخصصی (Key Concepts & Terms)
| اصطلاح انگلیسی | معادل فارسی مصوب | توضیح یکخطی ساده |
|---|---|---|
| File Upload Vulnerability | آسیبپذیری آپلود فایل | رخنه امنیتی ناشی از دریافت و ذخیره فایلهای مخرب یا بسیار حجیم بدون اعتبارسنجی |
| MIME Type | شناسه نوع رسانه | استاندارد جهانی مشخصکننده ماهیت و قالب فایل در وب (نظیر image/png) |
| Path Traversal | پیمایش غیرمجاز مسیر | حمله دستکاری نام فایل با نمادهای ../ برای دسترسی یا بازنویسی فایلهای سیستمی سرور |
| Storage Bucket Policy | سیاست امنیتی باکت ذخیرهسازی | قوانین کنترلی در سطح فضای ابری برای تعیین اینکه چه کسانی اجازه دانلود یا آپلود فایل دارند |
| Parameterized Queries | کوئریهای پارامتریزه | روش استاندارد اجرای دستورات دیتابیس که دادههای کاربر را از دستورات SQL جدا و ایمن میکند |
| SVG Script Injection | تزریق اسکریپت در فایل SVG | نوعی حمله XSS که از قابلیت اجرای جاوااسکریپت در ساختار برداری وکتور SVG سوءاستفاده میکند |
۴. جایگاههای تصاویر و نمودارها (Visual & Diagram Placeholders)
راهنمای ایجنت نویسنده: تمام تصاویر باید در پوشهٔ
images/ذخیره شده و در جدول تکخانهای وسطچین درج شوند:
- تصویر کاور درس:
images/cover.png- موضوع: جعبه امنیتی دیجیتال با اسکنر اشعه ایکس که فایلهای ورودی را اسکن کرده و بدافزارهای درون عکس را متوقف میکند.
- چرخه ۴ لایه محافظت از آپلود فایل:
images/four-layer-file-security-flow.png- موضوع: فلوچارت لایههای دفاعی: انتخاب فایل
\rightarrow۱) بررسی پسوند/MIME\rightarrow۲) بررسی سایز < 5MB\rightarrow۳) بازنویسی نام به UUID\rightarrow۴) اعتبارسنجی RLS باکت.
- موضوع: فلوچارت لایههای دفاعی: انتخاب فایل
- تنظیمات سیاستهای باکت در داشبورد Supabase Storage:
images/supabase-storage-policies-setup.png- موضوع: اسکرینشات از بخش Storage Policies در سوپابیس با تفکیک دسترسی Public Read و Admin Insert/Delete.
- حمله Path Traversal و نحوه خنثیسازی آن:
images/path-traversal-neutralization.png- موضوع: اینفوگرافیک مقایسهای: نام فایل مخرب نفوذگر در برابر نام فایل خنثی و تمیزشده با شناسه تصادفی در باکت.
۵. بخشبندی و ساختار محتوایی پیشنهادی درسنامه (README.md)
- تیتر اصلی:
# امنیت دیتابیس (RLS) و پروتکل امن آپلود فایل در Supabase Storage - مقدمه: چرا دکمه آپلود فایل، جذابترین دروازه ورودی برای هکرهاست و چطور آن را مثل یک گاوصندوق امن کنیم؟
- جدول کاور درس
- استعاره درب ورودی انبار کالا:
- هر کسی اجازه ورود کارتن در بسته بدون برچسب بازرسی به انبار شرکت را ندارد.
- خطرات مرگبار آپلود فایل بدون اعتبارسنجی:
- بدافزارهای پنهان در عکس، فایلهای مخرب اجرایی، و داستان جالب اسکریپتهای مخرب در فایلهای SVG.
- پروتکل ۴ لایه ایمنسازی آپلود در پورتفولیوی شخصی:
- چک کردن MIME Type، سقف ۵ مگابایت، و بازنویسی نام با UUID.
- کدنویسی ماژول آپلود امن
lib/upload.ts:- تابع بارگذاری امن عکسهای پروژه و تصویر کاور در باکت
portfolio-assets.
- تابع بارگذاری امن عکسهای پروژه و تصویر کاور در باکت
- پیکربندی سیاستهای باکت در Supabase Storage:
- تنظیم مجوز مشاهده همگانی برای تصاویر پروژهها، و انحصار آپلود/حذف فقط برای ادمین لاگینشده.
- جعبه پرامپت طلایی: ساخت کامپوننت آپلود امن فایل با ایجنت:
- پرامپت دقیق:
«من میخواهم در پنل ادمین پورتفولیو، یک کامپوننت آپلود تصویر برای کاور پروژهها اضافه کنم. این کامپوننت باید: ۱) فقط فایلهای PNG، JPG و WebP زیر ۵ مگابایت را قبول کند، ۲) نام فایل را با یک UUID تصادفی جایگزین کند، ۳) فایل را مستقیماً در باکت
portfolio-assetsسوپابیس آپلود کند و ۴) آدرس عمومی تصویر را در دیتابیس ذخیره کند.»
- پرامپت دقیق:
- باکس نکته Quera (
<details class="violet">): ماجرای حمله Path Traversal؛ چرا هرگز نباید به نام اصلی فایل ارسالی کاربر اعتماد کرد. - باکس هشدار Quera (
<details class="red">): هرگز اجازه آپلود اسناد اجرایی یا کدهای HTML/SVG را به کاربران احراز هویت نشده ندهید. - باکس رضایتبخش Quera (
<details class="green">): تست آپلود یک تصویر سنگین یا نامعتبر و مشاهده مسدودسازی هوشمندانه آن با پیام خطای خوانا. - جمعبندی درسنامه: ایمنسازی کامل پایگاه داده و فایلها؛ ورود به جهان پکیجها و خطرات وابستگیهای مخرب در درس بعدی.
۶. معیارهای پذیرش (Acceptance Criteria for Reviewer)
- آسیبپذیریهای متداول آپلود فایل (جعل نوع فایل، فایلهای حجیم و خطر SVG) تشریح گردند.
- پروتکل ۴ مرحلهای آپلود امن به همراه کدهای کاربردی ارائه شود.
- سیاستهای دسترسی به باکتهای Supabase Storage (Storage RLS) آموزش داده شود.
- پرامپت ساخت ماژول آپلود امن توسط ایجنت در متن درس گنجانده شود.