وردپرس به دلیل محبوبیت زیاد، هدف همیشگی رباتها و مهاجمان است. اما تقریباً همه نفوذهای موفق به سایتهای وردپرسی از چند مسیر تکراری انجام میشوند: افزونهها و قالبهای بهروزنشده، رمزهای ضعیف و پیکربندی نادرست. در این راهنمای عملی، امنیت وردپرس را لایهبهلایه، از هاست تا حسابهای کاربری، افزونهها و بکاپ، بالا میبریم.
فهرست مطالب
سایتهای وردپرسی چطور هک میشوند؟
- آسیبپذیری افزونهها و قالبها: بیشترین سهم نفوذها؛ بهخصوص نسخههای قدیمی یا افزونههایی که دیگر پشتیبانی نمیشوند.
- افزونهها و قالبهای «نال» یا کرکشده: اغلب از قبل حاوی درِ پشتی هستند.
- رمزهای ضعیف یا تکراری: حدس رمز روی
wp-login.phpوxmlrpc.php. - هاست ناامن یا سایتهای همسایه آلوده در محیطهای بد پیکربندیشده.
- سرقت اطلاعات ورود از کامپیوتر مدیر سایت یا حسابهای FTP و هاست.
هسته خود وردپرس معمولاً امن و بهسرعت وصله میشود؛ تمرکز اصلی باید روی افزونهها، دسترسیها و نگهداری باشد.
۱. بهروزرسانی؛ مهمترین اقدام
- هسته وردپرس، افزونهها و قالبها را بهطور منظم بهروز کنید. بهروزرسانیهای امنیتی جزئی هسته بهطور خودکار نصب میشوند؛ این قابلیت را خاموش نکنید.
- برای افزونههای کمخطر، بهروزرسانی خودکار را از صفحه افزونهها فعال کنید. برای افزونههای حساس مثل فروشگاه، ابتدا روی نسخه آزمایشی تست کنید.
- نسخه PHP پشتیبانیشده استفاده کنید؛ نسخههای قدیمی دیگر وصله امنیتی نمیگیرند.
قبل از بهروزرسانیهای بزرگ بکاپ بگیرید؛ روشها در بکاپ وردپرس.
۲. افزونهها و قالبها
- فقط از مخزن رسمی وردپرس یا سازندگان معتبر نصب کنید؛ هرگز نسخه نال.
- افزونههایی که بیش از یک سال بهروز نشدهاند یا از مخزن حذف شدهاند را جایگزین کنید.
- افزونهها و قالبهای بلااستفاده را حذف کنید، نه فقط غیرفعال؛ کد غیرفعال هم روی سرور قابل سوءاستفاده است.
- تعداد افزونهها را به حداقل لازم برسانید.
۳. حسابهای کاربری و ورود
- برای همه مدیران رمز قوی و منحصربهفرد و احراز هویت دومرحلهای فعال کنید.
- از نام کاربری
adminاستفاده نکنید و نام نمایشی را با نام کاربری یکی نگذارید. - نقشها را با کمترین دسترسی تعیین کنید: نویسنده یا ویرایشگر، نه مدیر.
- حسابهای افرادی که دیگر همکاری ندارند را فوراً حذف یا محدود کنید.
- تلاشهای ورود را محدود کنید؛ با افزونه امنیتی یا در سطح سرور با Fail2ban.
- اگر از برنامههای خارجی برای انتشار استفاده نمیکنید،
xmlrpc.phpرا غیرفعال کنید؛ اگر لازم است، از رمزهای اپلیکیشن (Application Passwords) استفاده کنید.
۴. سختسازی پیکربندی
این تنظیمات را در wp-config.php اضافه کنید:
define( 'DISALLOW_FILE_EDIT', true ); // غیرفعال کردن ویرایشگر فایل در پیشخوان
define( 'FORCE_SSL_ADMIN', true ); // ورود و پیشخوان فقط با HTTPS
define( 'WP_DEBUG_DISPLAY', false ); // عدم نمایش خطاها به بازدیدکنندگان
- ویرایشگر فایل: اگر مهاجم به یک حساب مدیر دست پیدا کند، با ویرایشگر داخلی میتواند کد PHP اجرا کند. غیرفعال کردن آن این مسیر را میبندد.
- کلیدهای امنیتی (Salts): مقادیر
AUTH_KEYو موارد مشابه را از سرویس رسمی وردپرس تولید کنید. تغییر آنها همه کاربران را از سیستم خارج میکند؛ پس از هر نفوذ احتمالی این کار را انجام دهید. - دسترسی فایلها: پوشهها ۷۵۵، فایلها ۶۴۴ و
wp-config.phpسختگیرانهتر؛ توضیح در دسترسی فایلها در لینوکس. - اجرای PHP در uploads: پوشه آپلودها نباید فایل PHP اجرا کند؛ رایجترین محل وبشلهاست.
در Apache یا LiteSpeed، فایل .htaccess داخل wp-content/uploads:
<FilesMatch "\.(php|phtml|phar)$">
Require all denied
</FilesMatch>
در Nginx، قانون معادل در پیکربندی سایت قرار میگیرد:
location ~* /wp-content/uploads/.*\.(php|phtml|phar)$ {
deny all;
}
۵. هاست و سرور
- HTTPS برای کل سایت؛ راهنما در SSL چیست.
- هاستی با ایزولهسازی اکانتها، اسکن بدافزار و بهروزرسانی منظم سرور.
- برای حسابهای هاست و FTP، رمز قوی و احراز هویت دومرحلهای؛ بهجای FTP از SFTP استفاده کنید.
- روی VPS، سختسازی پایه سرور را طبق تنظیمات امنیتی ضروری VPS انجام دهید.
- دیتابیس با کاربر اختصاصی همان سایت، نه کاربر root.
۶. فایروال و WAF
فایروال اپلیکیشن وب (WAF) درخواستهای مخرب رایج، مثل تلاش برای سوءاستفاده از آسیبپذیریهای شناختهشده، تزریق SQL و آپلود فایل مخرب را پیش از رسیدن به وردپرس مسدود میکند. سه سطح رایج:
- افزونه امنیتی داخل وردپرس: نصب ساده، اما در همان سرور و پس از بارگذاری PHP اجرا میشود.
- WAF سطح سرور مثل ModSecurity با قوانین OWASP CRS.
- WAF ابری یا CDN که ترافیک را پیش از رسیدن به سرور فیلتر میکند و در برابر حملات حجمی هم کمک میکند.
۷. بکاپ و پایش
- بکاپ خودکار روزانه از فایلها و دیتابیس، با یک نسخه خارج از هاست؛ راهنما در بکاپ وردپرس.
- پایش دسترسپذیری و تغییرات غیرمنتظره صفحه اصلی؛ نمونه در Uptime Kuma.
- ثبت فعالیت مدیران (Activity Log) برای ردیابی تغییرات.
- اسکن دورهای فایلها با افزونه امنیتی یا ابزارهای سرور.
اگر سایت هک شد
- سایت را در حالت نگهداری قرار دهید و از وضعیت فعلی بکاپ بگیرید (برای بررسی).
- رمز همه حسابها را تغییر دهید: مدیران وردپرس، هاست، FTP و دیتابیس؛ و کلیدهای امنیتی
wp-config.phpرا عوض کنید. - از آخرین بکاپ سالم بازیابی کنید، یا هسته، افزونهها و قالب را از منبع رسمی جایگزین و فایلهای ناشناس، بهخصوص PHPهای داخل uploads، را حذف کنید.
- کاربران مدیر ناشناس و تغییرات مشکوک در دیتابیس را بررسی کنید.
- راه نفوذ را پیدا و رفع کنید؛ وگرنه نفوذ تکرار میشود.
- در Google Search Console هشدارهای امنیتی را بررسی و پس از پاکسازی، درخواست بازبینی بدهید.
اگر سایت روی VPS است، خود سرور را هم آلوده فرض کنید و ورودها، کاربران و فرایندهای آن را بررسی کنید.
سوالات متداول
بهترین افزونه امنیتی وردپرس کدام است؟
افزونه بهتنهایی سایت را امن نمیکند. یک افزونه امنیتی معتبر با فایروال، محدودیت ورود و احراز هویت دومرحلهای مفید است، اما بهروزرسانی، رمزهای قوی و بکاپ مهمترند. فقط یک افزونه امنیتی همزمان فعال کنید.
آیا تغییر آدرس صفحه ورود امنیت را بالا میبرد؟
حجم رباتها را کم میکند، اما جایگزین رمز قوی و احراز هویت دومرحلهای نیست.
از کجا بفهمم سایتم هک شده است؟
نشانهها: ریدایرکت به سایتهای دیگر، صفحات اسپم در نتایج گوگل، کاربران مدیر ناشناس، فایلهای PHP ناشناس در uploads، هشدار مرورگر یا Search Console و کندی ناگهانی.
قالب و افزونه نال چه خطری دارد؟
این فایلها اغلب حاوی کد مخرب یا درِ پشتی هستند و بهروزرسانی امنیتی هم دریافت نمیکنند. صرفهجویی در هزینه لایسنس، ارزش ریسک از دست دادن کل سایت را ندارد.
هاست امن برای وردپرس
هاستهای تراست هاست با SSL رایگان و بکاپ منظم ارائه میشوند؛ برای حفاظت پیشرفتهتر، خدمات امنیت شبکه و WAF را ببینید.