بیش از ۷۰٪ نفوذها به سایتها و سیستمهای مدیریت محتوا (از جمله وردپرس و لاراول) و اپلیکیشنها، سوءاستفاده از قابلیت آپلود فایله.
مهاجم سعی میکنه فایلی با پسوند اجرایی یا نامهای فریبدهنده مثل:
shell.php.jpgbackdoor.phtmlscript.cgiداخل پوشههایی مثل
uploads، files یا storage قرار بده و بعد از طریق URL مستقیماً به اون فایل دسترسی پیدا کنه.اگر این پوشهها فقط برای نگهداری تصاویر، ویدیوها و فایلهای کاربران ساخته شدن، منطقیه که هیچ اسکریپتی اجازه اجرا داخلشون نداشته باشه.
در Nginx میتونیم این مسیر رو با یک Rule ساده محدود کنیم:
# جلوگیری از اجرای فایلهای اسکریپتی داخل پوشههای آپلود
location ~* /(?:uploads|files|storage)/.*\.(?:php[0-9]?|phtml|pl|py|cgi|sh|bash)$ {
deny all;
return 403;
}
💡 چه اتفاقی میفته؟
فایلهای معمولی مثل عکس، ویدیو و PDF همچنان بدون مشکل در دسترس هستن؛ اما اگر کسی موفق بشه یک Web Shell یا فایل اجرایی داخل این مسیرها آپلود کنه، درخواست دسترسی به اون فایل با 403 Forbidden متوقف میشه.
یعنی حتی اگر مرحلهی Upload Validation جایی اشتباه عمل کنه، یک لایه امنیتی دیگه در سطح Nginx جلوی اجرای فایل رو میگیره.
⚠️ البته این تنظیم بهتنهایی کافی نیست. در کنار اون باید نوع فایل، پسوند، MIME Type، نام فایل و محل ذخیرهسازی فایلهای آپلودی رو هم سمت Backend بهدرستی کنترل کنید.
امنیت خوب معمولاً نتیجهی یک Rule نیست؛ نتیجهی چند لایه دفاعیه. 🔐
کانال آموزشی کدنایت | آموزش برنامه نویسی 👇
https://t.me/codenight_ir