- نمایش لیست فایلها (Directory Listing یا Indexing) زمانی رخ میدهد که کاربر به یک پوشه وب سایت دسترسی پیدا کند و در آن فایل index (مثل index.html یا index.php) وجود نداشته باشد. در این حالت وبسرور محتویات پوشه را نمایش میدهد.
- نمایش لیست فایلها میتواند اطلاعات حساسی مثل بکآپها، فایلهای پیکربندی، اسکریپتهای خام یا فایلهایی با دسترسی محدود را در معرض دید قرار دهد و ریسکهای امنیتی ایجاد کند.
- در این مقاله روشهای متداول برای غیرفعال کردن یا مخفی کردن Directory Listing در دو کنترل پنل محبوب (cPanel و DirectAdmin)، و نکات تکمیلی امنیتی، آمده است.
چرا باید نمایش لیست فایلها را غیرفعال کنیم؟
- جلوگیری از افشای فایلها و پوشههای حساس
- کاهش اطلاعاتی که مهاجم میتواند برای شناسایی آسیبپذیریها استفاده کند
- افزایش کلی سطح امنیت وبسایت
- جلوگیری از مشاهده فایلهای پشتیبان، فایلهای خروجی، یا فایلهای موقتی
روش کلی مخفی کردن لیست فایل ها (مناسب برای اکثر سرورها)
قرار دادن یک فایل index: سادهترین روش ایجاد یک فایل index.html یا index.php خالی در پوشههایی است که میخواهید از لیست شدن جلوگیری کنید.مثال index.html ساده:
<!DOCTYPE html>
<html><head><meta charset="utf-8"><title>Forbidden</title></head><body></body></html>
روش 1 — استفاده از فایل .htaccess (مخصوص آپاچی / litespeed، کاربردی در cPanel و گاهی DirectAdmin)
- در روت هر پوشه یا در public_html فایل .htaccess ایجاد یا ویرایش کنید.
- برای غیرفعال کردن فهرست بندی (Directory Listing) دستور زیر را اضافه کنید:Options -Indexes
- برای نمایش پیغام 403 سفارشی:Options -IndexesErrorDocument 403 /403.html(که باید فایل 403.html را در روت سایت ایجاد کنید)
- نکات:
- مطمئن شوید سرور شما اجازه خواندن .htaccess را میدهد (AllowOverride تنظیم شده باشد).
- برخی هاستها با Nginx یا تنظیمات متفاوت رفتار میکنند و .htaccess روی آنها اعمال نمیشود.
روش 2 — تنظیمات Apache از طریق WHM/cPanel (برای کاربرانی که دسترسی روت یا WHM دارند)
- ورود به WHM → Apache Configuration → Global Configuration یا Apache Configuration → Include editor (بسته به نسخه)
- در تنظیمات اصلی میتوانید Indexes را غیرفعال کنید یا تغییرات در VirtualHost اعمال کنید:
- در پیکربندی VirtualHost مربوطه گزینه Options را بررسی و Indexes را حذف کنید.
- بعد از اعمال تغییر، Apache را ریاستارت کنید.
روش 3 — در DirectAdmin (کنترل پنل با دسترسی کاربر/ادمین)
- DirectAdmin به طور پیشفرض ممکن است فهرست بندی را کنترل کند، اما برای اعمال تغییر میتوانید:
- اگر دسترسی به فایل .htaccess دارید از Options -Indexes استفاده کنید.
- اگر دسترسی root دارید و Nginx را در جلو دارید، autoindex off را در کانفیگ Nginx اضافه کنید.
- برخی تنظیمات و templateهای DirectAdmin برای Apache را میتوان ویرایش کرد (در مسیرهای templates/apache یا similar) — این کار نیاز به دقت و بکآپ دارد.
روش 5 — از طریق File Manager در cPanel (روش ساده برای کاربران بدون دسترسی SSH)
- وارد cPanel شوید → File Manager → به پوشه مورد نظر بروید
- اگر index.html یا index.php وجود ندارد: از گزینه +File یک فایل index.html خالی بسازید تا محتوای پوشه نمایش داده نشود.
- برای ایجاد یا ویرایش .htaccess: در فایل منیجر فایل .htaccess را مشاهده/ایجاد و Options -Indexes را اضافه کنید.
روش 6 — جلوگیری از دسترسی به فایلها یا پوشههای خاص با .htaccess
-
برای جلوگیری از دسترسی به فایلهایی با پسوند مشخص یا پوشههای خاص:
جلوگیری از نمایش محتویات هر پوشه
Options -Indexes
جلوگیری از دسترسی به فایلهای backup
<Files ~ “.(bak|sql|tar|gz|zip)$”>
Require all denied
</Files>
توجه: برای سرورهایی با Apache 2.2 از دستورالعملهای قدیمی (Deny from all) استفاده میشود؛ در Apache 2.4 از Require all denied استفاده کنید.
نکات امنیتی تکمیلی
- حذف فایلهای بکآپ از public_html: فایل بکآپ یا export دیتابیس را هرگز در پوشه عمومی بارگذاری نکنید.
- محدود کردن دسترسی به فایلهای حساس (مثل .env, config.php) با قوانین .htaccess
- استفاده از فایل robots.txt برای جلوگیری از ایندکس شدن دایرکتوریها توسط موتورهای جستجو (توضیح: این فقط یک درخواست به رباتها است و امنیت واقعی ایجاد نمیکند).مثال:User-agent: *Disallow: /backups/
- بررسی مجوز فایلها و پوشهها (Permissions): پوشهها معمولاً 755 و فایلها 644 باید داشته باشند. تنظیمات صحیح را حفظ کنید.
- اسکن دورهای وبسایت با ابزارهای امنیتی یا افزونههای امنیتی (مثل Wordfence برای وردپرس یا ابزارهای مشابه).
- استفاده از WAF یا سرویس CDN مثل Cloudflare برای کاهش ریسک حملات.
روش تست پس از اعمال تغییر
- مسدود کردن نمایش لیست: مرورگر را باز کنید و به URL پوشهای در سایت بروید (مثلاً example.com/uploads/) که index ندارد.
- باید پیام 403 یا صفحه خالی یا ریدایرکت به index را ببینید.
- برای اطمینان از جلوگیری از دسترسی به فایلهای مشخص: مستقیماً آدرس فایل بکآپ را باز کنید (مثلاً example.com/backup.sql) و باید دسترسی مسدود باشد.
- استفاده از ابزارهای آنلاین برای بررسی Indexing: برخی سرویسهای تست امنیتی میتوانند نمایش دایرکتوری را چک کنند.
نمونههای عملی و آماده برای کپی — خلاصه
-
سادهترین: ایجاد index.html خالی در هر پوشهای که نمیخواهید فهرست شود.
-
.htaccess (در ریشه یا پوشه):
Options -Indexes
ErrorDocument 403 /403.html
-
جلوگیری از دسترسی به فایلهای پنهان:
<FilesMatch “^.”>
Require all denied
</FilesMatch>
-
جلوگیری از دسترسی به بکآپها:
<Files ~ “.(bak|sql|tar|gz|zip)$”>
Require all denied
</Files>
-
Nginx:
location / {
autoindex off; try_files $uri $uri/ =404;
}
اشکالزدایی متداول
- بعد از اضافه کردن .htaccess هنوز لیست نمایش داده میشود:
- بررسی کنید سرور شما Apache است و AllowOverride برای دایرکتوری فعال است.
- ممکن است Nginx جلوی Apache باشد؛ Nginx .htaccess را نمیخواند.
- کش مرورگر یا کش سرور را پاک کنید.
- پس از ویرایش کانفیگ سرور، فراموش نکنید وبسرور (Apache/Nginx) را ریلود یا ریاستارت کنید.
جمعبندی
- غیرفعال کردن Directory Listing یک گام ساده اما موثر در افزایش امنیت وبسایت است.
- برای کاربران cPanel استفاده از .htaccess یا ایجاد فایل index سادهترین روش است. برای سرورهای Nginx باید در پیکربندی Nginx autoindex را خاموش کنید.
- همیشه از قوانین محافظتی برای فایلهای حساس استفاده کنید و فایلهای بکآپ را از پوشههای عمومی حذف کنید.
نظرات کاربران