
اخیراً متوجه یک آسیبپذیری جدی و به سادگی قابل سوءاستفاده در پروژههای Django با پیکربندی نادرست Nginx شدم. (نمیخواهم بگویم چطور متوجه شدم 😅)
مشکل از یک پیکربندی رایج و به ظاهر بیضرر Nginx برای سرو کردن فایلهای استاتیک یا مدیا در برنامههای Django ناشی میشود. در این پیکربندی، استفاده از دستور alias میتواند باعث افشای محتوای دایرکتوری والد شود. به این معنا که اگر مسیرهایی مانند /media../ یا /static../ استفاده شوند و دایرکتوریهای مدیا یا استاتیک در همان دایرکتوری کد منبع شما قرار داشته باشند، ممکن است کل کد منبع برنامه شما در معرض دسترس قرار گیرد.
راهحلهای پیشنهادی:
اضافه کردن اسلش در انتها: مطمئن شوید که در مسیرهای /media/ یا /static/، یک اسلش در انتها اضافه شده باشد.
استفاده از گزینه “root” به جای “alias”: در صورت امکان، به گزینهی امنتر root در پیکربندی Nginx تغییر دهید.
برای بررسی سریع اینکه سایت شما آسیبپذیر هست یا نه، میتوانید آدرس زیر را امتحان کنید
(در صورت نیاز، .gitignore را با نام فایلی که میدانید در دایرکتوری والد وجود دارد جایگزین کنید.)
بعد از بیش از 15 سال استفاده از این روشهای پیادهسازی در پروژههای Django، واقعاً تعجبآور است که هنوز این مشکل به این اندازه مطرح نشده است. از همه همکاران و علاقهمندان میخواهم که پیکربندیهای Nginx خود را دوباره بررسی کنند و در صورت امکان این مطلب را به اشتراک بگذارند تا از بروز چنین مشکلاتی جلوگیری شود.