امنیت وردپرس | بلاگ وب‌داده

غیرفعال کردن Directory Browsing در وردپرس

اگر با باز کردن یک پوشه از سایتتان، فهرست کامل فایل‌ها جلوی چشم هر بازدیدکننده‌ای ظاهر می‌شود، سایت شما یک نشت اطلاعاتی ساده اما خطرناک دارد. در این راهنما، قدم‌به‌قدم این در باز را می‌بندیم.
غیرفعال کردن Directory Browsing وردپرس یعنی بستن قابلیتی که در آن، وقتی پوشه‌ای فایل ایندکس (مثل index.php) ندارد، وب‌سرور به‌جای خطا، فهرست کامل فایل‌ها و پوشه‌ها را به بازدیدکننده نشان می‌دهد. در ادامه، هم می‌فهمید این «Index of» چرا خطرناک است و هم سه روش عملی (سی‌پنل، htaccess و Nginx) را برای بستن آن یاد می‌گیرید؛ از ساده‌ترین راه گرافیکی تا روش فنی سطح سرور، همراه با کدهای آماده و معایب صادقانه هر روش.
  • مشکل چیست: نمایش صفحه «Index of /» یعنی هر کسی می‌تواند ساختار فایل، افزونه‌ها و فایل‌های حساس شما را ببیند.
  • ساده‌ترین راه: ابزار Indexes در سی‌پنل، بدون نوشتن حتی یک خط کد.
  • روش کلاسیک: افزودن دستور Options -Indexes به فایل .htaccess روی سرور آپاچی.
  • کاربران Nginx: فعال بودن autoindex off که معمولاً پیش‌فرض هم هست.
  • واقعیت صادقانه: این کار فقط «فهرست» را می‌بندد؛ جای کنترل دسترسی و رمزگذاری فایل‌ها را نمی‌گیرد.

در یک نگاه

فهرست‌گیری دایرکتوری یک باگ نیست، یک تنظیم است که به‌صورت پیش‌فرض روی بعضی سرورها روشن می‌ماند. بستن آن چند دقیقه بیشتر طول نمی‌کشد اما یکی از ساده‌ترین قدم‌های امن‌سازی سایت است. زیرساخت میزبانی امن و پشتیبانی فنی این تنظیمات را هم می‌توانید از وب‌داده بگیرید.
حتماً این مقاله را باز کرده‌اید چون یا در ابزار سئو و اسکن امنیتی، هشدار «Directory Listing Enabled» گرفته‌اید، یا با باز کردن آدرس یک پوشه، به‌جای صفحه سایت، لیستی از فایل‌ها دیده‌اید. خبر خوب این است که رفع آن اصلاً پیچیده نیست؛ ما هر روش را طوری توضیح می‌دهیم که حتی اگر تازه‌کارید، خودتان و بدون کمک متخصص از پسش بربیایید.

غیرفعال کردن Directory Browsing وردپرس چیست و چرا لازم است؟

«فهرست‌گیری دایرکتوری» (Directory Browsing یا Directory Listing) یک رفتار پیش‌فرض در بعضی وب‌سرورهاست. وقتی کاربری آدرس یک پوشه را باز می‌کند و در آن پوشه هیچ فایل ایندکسی مثل index.php یا index.html وجود نداشته باشد، سرور به‌جای نمایش خطا، محتوای همان پوشه را به شکل یک فهرست کلیک‌شدنی (صفحه معروف «Index of /») به بازدیدکننده نشان می‌دهد.
این یعنی هر کسی می‌تواند نام فایل‌ها، پوشه‌ها، افزونه‌ها، قالب‌ها و حتی برخی فایل‌های پیکربندی سایت شما را ببیند و مستقیم دانلود کند. برای یک سایت وردپرسی که ساختار پوشه‌هایش (مثل wp-content/uploads) استاندارد و شناخته‌شده است، این موضوع در عمل نقشه‌ای از سایت به‌دست مهاجم می‌دهد.

یک تشبیه ساده

فهرست‌گیری دایرکتوری مثل این است که درِ انبار خانه‌تان را باز بگذارید و یک فهرست از همه‌ی جعبه‌ها هم کنارش بچسبانید. لازم نیست کسی جست‌وجو کند؛ خودتان دقیقاً نشان داده‌اید چه چیزی کجاست. بستن این قابلیت، همان بستن در انبار و برداشتن آن فهرست است.

چرا وردپرس به‌تنهایی کافی نیست؟

هسته وردپرس در پوشه‌هایی مثل wp-includes و wp-content یک فایل index.php خالی می‌گذارد تا محتوای آن‌ها فهرست نشود. اما این کار همه‌ی زیرپوشه‌ها، به‌ویژه پوشه‌های آپلود و پوشه‌های ساخته‌شده توسط افزونه‌ها را پوشش نمی‌دهد. برای همین، غیرفعال‌سازی در سطح سرور همچنان لازم است.
نمونه صفحه Index of و مفهوم غیرفعال کردن Directory Browsing وردپرس برای جلوگیری از نمایش فایل‌ها

فعال بودن فهرست‌گیری دایرکتوری چه خطری دارد؟

پیش از رفتن سراغ راهکارها، خوب است بدانید چرا این موضوع در دسته‌ی «حل مشکل وردپرس» و امن‌سازی قرار می‌گیرد. مهم‌ترین ریسک‌ها این‌ها هستند:
  • نشت اطلاعات (Information Leakage): افشای ساختار فایل، نام و نسخه افزونه‌ها و قالب‌ها که به مهاجم کمک می‌کند آسیب‌پذیری‌های شناخته‌شده را هدف بگیرد.
  • دسترسی مستقیم به فایل‌ها: فایل‌های بکاپ، لاگ، متنی یا پیکربندی که ایندکس ندارند، ممکن است قابل مشاهده و دانلود شوند.
  • افزایش سطح حمله: هرچه مهاجم اطلاعات بیشتری از ساختار سایت داشته باشد، حمله هدفمندتر و ساده‌تر می‌شود.
  • سوءاستفاده خودکار: ربات‌ها با جست‌وجوی ساده در گوگل، سایت‌هایی با فهرست‌گیری باز را پیدا و فهرست‌بندی می‌کنند.

نقل‌قول از مستندات رسمی آپاچی

مستندات وب‌سرور آپاچی درباره فهرست‌گیری دایرکتوری تأکید می‌کند که در محیط تولید (Production)، روشن بودن این قابلیت توصیه نمی‌شود، چون می‌تواند به نشت اطلاعات منجر شود و به مهاجم در شناخت ساختار سایت و افزایش سطح حمله کمک کند. منبع: Apache httpd wiki — Directory Listing Configuration

روش‌های بستن فهرست‌گیری دایرکتوری (گام‌به‌گام)

قبل از شروع: یک بکاپ بگیرید

هر تغییری روی فایل .htaccess می‌تواند در صورت اشتباه، خطای 500 برای کل سایت بسازد. پس قبل از هر کاری از سایت و فایل‌های پیکربندی بکاپ کامل بگیرید. برای این کار می‌توانید از بکاپ رایگان و اسنپ‌شات فوری در هاست سی‌پنل کمک بگیرید تا اگر چیزی طبق انتظار پیش نرفت، سریع به عقب برگردید.

روش اول: ابزار Indexes در سی‌پنل (ساده‌ترین راه، بدون کد)

اگر هاست شما سی‌پنل دارد، اصلاً نیازی به نوشتن کد نیست. در بخش Advanced (پیشرفته) وارد ابزار Indexes شوید، پوشه‌ای را که می‌خواهید تنظیم کنید انتخاب کنید و گزینه No Indexing را بزنید و ذخیره کنید. سی‌پنل پشت صحنه همان خط لازم را به فایل .htaccess همان پوشه اضافه می‌کند (و اگر .htaccess نبود، می‌سازد). از این به بعد، به‌جای فهرست فایل‌ها، بازدیدکننده خطای 403 Forbidden می‌بیند.
مسیر ابزار Indexes و انتخاب گزینه No Indexing در پنل سی‌پنل

روش دوم: افزودن دستور Options -Indexes به فایل htaccess

روش کلاسیک و مستقل از پنل، ویرایش مستقیم فایل .htaccess در پوشه ریشه سایت (کنار wp-config.php) است. این روش روی سرورهای آپاچی و لایت‌اسپید که در هاست‌های سی‌پنل رایج‌اند کار می‌کند. کافی است این خط را اضافه کنید؛ فقط دقت کنید آن را خارج و بالای بلاک # BEGIN WordPress ... # END WordPress بگذارید، چون وردپرس آن بلاک را هنگام بازنویسی پیوندهای یکتا بازسازی می‌کند و تغییرات داخلش پاک می‌شود:
# --- تنظیمات سفارشی وب‌داده: این خطوط را بالای بلاک وردپرس قرار دهید ---
# غیرفعال‌سازی فهرست‌گیری دایرکتوری روی سرور آپاچی و لایت‌اسپید
Options -Indexes

# BEGIN WordPress
# هشدار: این بخش را وردپرس خودکار مدیریت می‌کند؛ چیزی داخل آن ننویسید.
# END WordPress

چطور درست بودنش را تست کنم؟

بعد از ذخیره، آدرس یک پوشه بدون فایل ایندکس را در مرورگر باز کنید؛ مثلاً example.com/wp-content/uploads/. اگر به‌جای فهرست فایل‌ها خطای 403 Forbidden ببینید، یعنی تنظیم درست اعمال شده است. اگر هنوز فهرست را می‌بینید، کش مرورگر را پاک کنید و دوباره امتحان کنید.

روش سوم: کاربران Nginx و دستور autoindex off

اگر سایت شما روی وب‌سرور Nginx اجرا می‌شود، فایل .htaccess اصلاً خوانده نمی‌شود و باید تنظیم را در فایل کانفیگ Nginx انجام دهید. خبر خوب این است که در Nginx فهرست‌گیری به‌صورت پیش‌فرض خاموش است و تنها وقتی روشن می‌شود که ماژول autoindex فعال شده باشد. برای اطمینان، دستور autoindex off; را در بلاک server یا location قرار دهید:
# فایل کانفیگ Nginx: داخل بلاک server یا location این خط را اضافه کنید
server {
    # ... سایر تنظیمات سایت ...
    location / {
        autoindex off;   # غیرفعال کردن فهرست‌گیری دایرکتوری
    }
}

نکته درباره هاست اشتراکی

روی هاست‌های اشتراکی معمولاً به فایل کانفیگ Nginx دسترسی مستقیم ندارید؛ این تنظیم در سطح سرور و توسط ارائه‌دهنده هاست مدیریت می‌شود. در این حالت کافی است از پشتیبانی هاست بخواهید فهرست‌گیری دایرکتوری را غیرفعال کند.

روش چهارم: استفاده از افزونه‌های امنیتی وردپرس

بسیاری از افزونه‌های امنیتی معتبر وردپرس، گزینه‌ای یک‌کلیکی برای «غیرفعال‌سازی فهرست‌گیری دایرکتوری» دارند و پشت صحنه همان خط .htaccess را اعمال می‌کنند. این راه برای کسانی که نمی‌خواهند به فایل‌ها دست بزنند مناسب است، اما در نظر داشته باشید که نصب یک افزونه کامل امنیتی فقط برای این کارِ ساده، کمی زیاده‌روی است و بار اضافه روی سایت می‌گذارد. اگر افزونه امنیتی دارید از همان استفاده کنید؛ در غیر این صورت روش سی‌پنل یا htaccess سبک‌تر است.

اگر بعد از ویرایش htaccess خطای 500 گرفتید چه کنید؟

گاهی یک اشتباه کوچک در فایل .htaccess باعث خطای «500 Internal Server Error» برای کل سایت می‌شود. نگران نباشید، این حالت کاملاً قابل‌بازگشت است. از طریق مدیر فایل هاست یا FTP، خطی را که اضافه کرده‌اید حذف کنید یا فایل .htaccess را به نسخه بکاپ برگردانید تا سایت فوری برگردد. به همین دلیل بود که همان اول تأکید کردیم اول بکاپ بگیرید.

جدول مقایسه روش‌های غیرفعال‌سازی فهرست‌گیری

این جدول کمک می‌کند بر اساس نوع دسترسی و سطح فنی خودتان، بهترین روش را انتخاب کنید:
روشسطح دشوارینیاز به دسترسیمناسب برایکار روی Nginx؟
ابزار Indexes سی‌پنلبسیار آسانپنل سی‌پنلهمه، به‌ویژه تازه‌کارهاخیر (مخصوص آپاچی)
ویرایش .htaccessمتوسطدسترسی به فایل‌هاکاربران آپاچی/لایت‌اسپیدخیر
دستور autoindex offمتوسط (فنی)کانفیگ سرورسرورهای Nginxبله
افزونه امنیتیآسانپیشخوان وردپرسکسانی که افزونه امنیتی دارندبله (وابسته به افزونه)

پیشنهاد ما برای شروع

اگر هاست سی‌پنل دارید، ابزار Indexes سریع‌ترین و کم‌ریسک‌ترین راه است. اگر به فایل‌ها دسترسی دارید و کمی فنی هستید، خط Options -Indexes در .htaccess کار را تمام می‌کند. کاربران Nginx هم فقط باید از خاموش‌بودن autoindex مطمئن شوند.

میزبانی امن وردپرس در وب‌داده

بخشی از امنیت سایت، پیش از هر تنظیمی، به بستر میزبانی برمی‌گردد: سروری که درست پیکربندی شده، پنلی که اعمال این تنظیمات را ساده می‌کند و پشتیبانی که در لحظه بحران کنارتان است. ما در وب‌داده تلاش کرده‌ایم این کارها را برایتان راحت‌تر کنیم:
✅ زیرساخت سرورهای نسل جدید HPE (Gen11 و Gen10) برای پایداری و سرعت بالا.
✅ دیتاسنترهای متنوع در ایران، هلند و آلمان برای انتخاب نزدیک‌ترین لوکیشن.
✅ کنترل‌پنل سی‌پنل با ابزار Indexes و مدیر فایل برای اعمال آسان همین تنظیمات.
✅ پشتیبانی فنی ۲۴ ساعته برای کمک در ویرایش .htaccess، تنظیم سرور و بازگردانی بکاپ.

تجربه پشتیبانی وب‌داده

در تیم پشتیبانی وب‌داده بارها پیش آمده که کاربری بعد از ویرایش دستی .htaccess، با خطای 500 روبه‌رو شده و دسترسی به سایتش را از دست داده است. راه‌حل ما همیشه ساده بوده: از طریق مدیر فایل هاست، فایل .htaccess را به نسخه سالم برمی‌گردانیم و در چند دقیقه سایت باز می‌شود. همین تجربه نشان می‌دهد چرا «بکاپ پیش از تغییر» و «دسترسی به مدیر فایل» این‌قدر مهم‌اند.
اگر به‌دنبال بستری مطمئن برای وردپرس هستید، می‌توانید هاست سی‌پنل وب‌داده را ببینید. برای نگاه گسترده‌تر به امن‌سازی زیرساخت هم مطلب روش‌های امن‌سازی سرور کمک‌کننده است.

معایب و محدودیت‌هایی که باید بدانید

صادقانه بگوییم، بستن فهرست‌گیری دایرکتوری معجزه نمی‌کند و محدودیت‌هایی دارد. نخست، این کار فقط «نمایش فهرست» را می‌بندد؛ اگر کسی آدرس دقیق یک فایل را بداند، همچنان می‌تواند به آن دسترسی داشته باشد. پس این روش جای کنترل دسترسی واقعی و رمزگذاری فایل‌های حساس را نمی‌گیرد. دوم، دستور Options -Indexes فقط روی سرورهای آپاچی/لایت‌اسپید کار می‌کند و روی Nginx بی‌اثر است. سوم، ویرایش نادرست .htaccess می‌تواند کل سایت را با خطای 500 از دسترس خارج کند. جمع‌بندی: این کار یک قدم لازم و ساده در امن‌سازی است، اما باید در کنار به‌روزرسانی مرتب، رمز قوی و بکاپ منظم دیده شود، نه به‌جای آن‌ها.

پرسش‌های پرتکرار درباره فهرست‌گیری دایرکتوری

جمع‌بندی و چک‌لیست نهایی

دیدیم که فهرست‌گیری دایرکتوری یک درِ باز ساده اما پرخطر است که ساختار فایل سایت شما را لو می‌دهد، و بستن آن با سه روش عملی ممکن است: ابزار Indexes در سی‌پنل برای تازه‌کارها، دستور Options -Indexes در .htaccess برای کاربران آپاچی، و autoindex off برای سرورهای Nginx. مهم‌ترین پیام مقاله را فراموش نکنید: این کار یک قدم لازم در امن‌سازی است، اما باید در کنار بکاپ منظم، به‌روزرسانی و رمز قوی دیده شود، نه به‌جای آن‌ها.

چک‌لیست سریع

✅ اول از همه از سایت و فایل .htaccess بکاپ بگیرید.
✅ اگر سی‌پنل دارید، از ابزار Indexes و گزینه No Indexing استفاده کنید.
✅ کاربران آپاچی: خط Options -Indexes را بالای بلاک وردپرس در .htaccess بگذارند.
✅ کاربران Nginx: از فعال بودن autoindex off مطمئن شوند.
✅ با باز کردن آدرس یک پوشه، دیدن خطای 403 را به‌جای فهرست فایل‌ها تست کنید.
✅ امنیت را یک فرایند مداوم ببینید: به‌روزرسانی و بکاپ منظم را ادامه دهید.
در صورتی که سوالی داشتید می‌توانید در بخش نظرات با ما در ارتباط باشید.
منابع: مستندات رسمی Directory Listing Configuration در ویکی آپاچی، سند ngx_http_autoindex_module در nginx.org، و مقاله Disable PHP Execution and Directory Browsing در Patchstack.
وب داده
وب داده

جدید ترین مطالب آموزشی و کاربردی را در اینجا بخوانید !
ما با بهره‌گیری از دانش روز و تجربه متخصصان حوزه فناوری، مجموعه‌ای از آموزش‌های کاربردی و مقالات تخصصی را گردآوری کرده‌ایم که هر یک، پاسخی دقیق به پرسش‌های شماست. ؛ از مفاهیم پایه تا پیچیده‌ترین تکنیک‌های حرفه‌ای. اینجا، دانش با زبانی ساده اما عمیق در اختیار شما قرار می‌گیرد.

مقاله‌ها: 69
پاسخی بگذارید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *