چرا امنیت وردپرس مهمتر از همیشه است؟
وردپرس بهعنوان محبوبترین سیستم مدیریت محتوای جهان، هدف اصلی حملات خودکار و انسانی است. هر روز هزاران ربات اسکنر، سایتهای وردپرسی را برای یافتن آسیبپذیریهای شناختهشده جستجو میکنند. اگر فکر میکنید سایت کوچک شما ارزش حمله ندارد، سخت در اشتباهید؛ بیشتر حملات خودکار بهدنبال سایتهای بیدفاع میگردند، نه سایتهای بزرگ. در این مقاله، یک نقشه راه عملی برای امنیت وردپرس ارائه میدهیم که از مهمترین و مؤثرترین اقدامات شروع میکند و تا جزئیات فنی پیش میرود.
نکته کلیدی این است که امنیت یک فرایند است، نه یک محصول. هیچ افزونهای به تنهایی سایت شما را امن نمیکند. ترکیبی از عادتهای درست، تنظیمات دقیق و پایش مداوم، سطح امنیتی سایت شما را به شکل چشمگیری بالا میبرد. در ادامه، چهار حوزه اصلی را پوشش میدهیم: بهروزرسانی، محدودکردن ورود، سطح دسترسی فایلها و پنهانکردن نسخه وردپرس.
بهروزرسانی؛ اولین و مهمترین خط دفاعی
بیشتر حملات موفق به سایتهای وردپرسی، از آسیبپذیریهای شناختهشدهای استفاده میکنند که نسخه جدید آنها منتشر شده اما سایتها بهروزرسانی نکردهاند. بهروزرسانی منظم هسته وردپرس، افزونهها و قالبها، سادهترین و مؤثرترین اقدام برای امنیت وردپرس است.
فعالسازی بهروزرسانی خودکار
از نسخه ۵.۶ به بعد، وردپرس امکان بهروزرسانی خودکار نسخههای جزئی (minor) را بهصورت پیشفرض فعال کرده است. اما برای نسخههای اصلی (major) و افزونهها، باید خودتان تصمیم بگیرید. میتوانید با افزودن کد زیر به فایل wp-config.php، بهروزرسانی خودکار را برای همه چیز فعال کنید:
// فعالسازی بهروزرسانی خودکار برای همه چیز
add_filter( 'auto_update_core', '__return_true' );
add_filter( 'auto_update_plugin', '__return_true' );
add_filter( 'auto_update_theme', '__return_true' );
اگر ترجیح میدهید کنترل بیشتری داشته باشید، حداقل بهروزرسانیهای امنیتی را فعال کنید و برای نسخههای اصلی، یک برنامه منظم هفتگی یا ماهانه تعیین کنید. بهروزرسانی را در ساعات کمبازدید انجام دهید و همیشه قبل از آن، از سایت خود بکاپ بگیرید.
حذف افزونهها و قالبهای غیرضروری
هر افزونهای که نصب میکنید، سطح حمله سایت شما را افزایش میدهد. افزونههایی که استفاده نمیکنید را حذف کنید، نه فقط غیرفعال کنید. فایلهای غیرفعال همچنان روی سرور باقی میمانند و ممکن است آسیبپذیری داشته باشند. همین قانون برای قالبها هم صدق میکند؛ فقط قالب فعال و یک قالب پیشفرض (مانند Twenty Twenty-Four) را نگه دارید.
محدودکردن ورود به پیشخوان وردپرس
صفحه ورود (wp-login.php) یکی از پرحملترین نقاط هر سایت وردپرسی است. حملات brute-force (حدس زدن رمز عبور) بهصورت خودکار و با هزاران تلاش در دقیقه انجام میشوند. محدودکردن ورود، یکی از ارکان اصلی امنیت وردپرس است.
استفاده از رمز عبور قوی و احراز هویت دومرحلهای
رمز عبور مدیر سایت باید حداقل ۱۶ کاراکتر و ترکیبی از حروف بزرگ، کوچک، اعداد و نمادها باشد. از تکرار رمز عبور در سایتهای دیگر جدا خودداری کنید. برای لایه امنیتی بیشتر، افزونهای مانند WP 2FA یا Wordfence را نصب کنید تا ورود دومرحلهای (2FA) فعال شود. با 2FA، حتی اگر رمز عبور لو برود، مهاجم بدون کد دومرحلهای نمیتواند وارد شود.
محدودکردن تعداد تلاشهای ورود
افزونههایی مانند Limit Login Attempts Reloaded تعداد تلاشهای ناموفق را محدود میکنند. تنظیم پیشنهادی: حداکثر ۳ تلاش ناموفق در هر ۱۰ دقیقه، و قفل شدن به مدت ۳۰ دقیقه. این کار حملات brute-force را عملاً بیاثر میکند.
تغییر آدرس صفحه ورود
با تغییر آدرس پیشفرض ورود، رباتها را گیج میکنید. افزونه WPS Hide Login به شما اجازه میدهد آدرس ورود را به مسیری دلخواه مانند /my-secret-login تغییر دهید. توجه کنید که این کار امنیت مطلق ایجاد نمیکند، اما تعداد حملات خودکار را بهشدت کاهش میدهد.
محدودکردن ورود بر اساس IP
اگر از یک IP ثابت استفاده میکنید، میتوانید دسترسی به wp-login.php را فقط به IP خودتان محدود کنید. این کار را میتوانید در فایل .htaccess (برای آپاچی) انجام دهید:
<Files wp-login.php>
Require ip YOUR_IP_ADDRESS
</Files>
اگر از Nginx استفاده میکنید، کد زیر را به بلوک server اضافه کنید:
location = /wp-login.php {
allow YOUR_IP_ADDRESS;
deny all;
}
تنظیم سطح دسترسی فایلها و پوشهها
دسترسیهای نادرست فایل (permissions) یکی از دلایل اصلی نفوذ به سایتهای وردپرسی است. اگر فایلها قابل نوشتن توسط همه باشند، مهاجم میتواند کد مخرب تزریق کند. تنظیم صحیح سطح دسترسی، بخش حیاتی امنیت وردپرس است.
دسترسیهای استاندارد و ایمن
دسترسیهای زیر بهعنوان استاندارد طلایی شناخته میشوند:
- فایلها:
644(مالک میتواند بخواند و بنویسد، دیگران فقط بخوانند) - پوشهها:
755(مالک میتواند بخواند، بنویسد و اجرا کند؛ دیگران فقط بخوانند و اجرا کنند) - فایل
wp-config.php:600(فقط مالک میتواند بخواند و بنویسد)
برای اعمال این دسترسیها از طریق SSH، از دستورات زیر استفاده کنید:
# تنظیم دسترسی همه فایلها به 644
find /path/to/wordpress -type f -exec chmod 644 {} \;
# تنظیم دسترسی همه پوشهها به 755
find /path/to/wordpress -type d -exec chmod 755 {} \;
# تنظیم دسترسی ویژه برای wp-config.php
chmod 600 /path/to/wordpress/wp-config.php
محافظت از فایل wp-config.php
فایل wp-config.php حاوی اطلاعات حساسی مانند نام کاربری و رمز عبور دیتابیس است. علاوه بر دسترسی 600، میتوانید آن را به پوشهای بالاتر از ریشه سایت منتقل کنید. وردپرس بهطور خودکار این فایل را در مسیر بالاتر جستجو میکند. این کار باعث میشود فایل از طریق وب قابل دسترسی نباشد.
غیرفعالکردن اجرای PHP در پوشههای آپلود
پوشه wp-content/uploads محل آپلود فایلهای کاربران است. اگر مهاجم بتواند یک فایل PHP مخرب در این پوشه آپلود کند و آن را اجرا کند، سایت شما در خطر جدی است. با افزودن کد زیر به فایل .htaccess در پوشه آپلود، اجرای PHP را غیرفعال کنید:
<FilesMatch "\.(php|php5|phtml)$">
Require all denied
</FilesMatch>
برای Nginx، کد زیر را به بلوک location اضافه کنید:
location ~* /wp-content/uploads/.*\.(php|php5|phtml)$ {
deny all;
}
777 تغییر میدهند تا مشکل آپلود حل شود. این کار بسیار خطرناک است و به مهاجم اجازه میدهد هر فایلی را روی سرور بنویسد. همیشه از دسترسیهای استاندارد استفاده کنید.پنهانکردن نسخه وردپرس
مهاجمان با دانستن نسخه دقیق وردپرس، افزونهها و قالبها، میتوانند آسیبپذیریهای شناختهشده آن نسخه را هدف قرار دهند. پنهانکردن نسخه، اطلاعات ارزشمندی را از دید مهاجم پنهان میکند و بخشی از امنیت وردپرس است.
حذف متا تگ نسخه از هدر
وردپرس بهطور پیشفرض یک متا تگ با محتوای نسخه در هدر سایت قرار میدهد. برای حذف آن، کد زیر را به فایل functions.php قالب فرزند (child theme) اضافه کنید:
remove_action( 'wp_head', 'wp_generator' );
حذف نسخه از URL فایلهای استاتیک
وردپرس نسخه را به انتهای آدرس فایلهای CSS و JS اضافه میکند (مانند style.css?ver=6.4.2). برای حذف این پارامتر، کد زیر را اضافه کنید:
function remove_wp_version_from_assets( $src ) {
if ( strpos( $src, 'ver=' ) ) {
$src = remove_query_arg( 'ver', $src );
}
return $src;
}
add_filter( 'style_loader_src', 'remove_wp_version_from_assets', 9999 );
add_filter( 'script_loader_src', 'remove_wp_version_from_assets', 9999 );
محدودکردن دسترسی به فایلهای اطلاعاتی
فایلهایی مانند readme.html و license.txt حاوی اطلاعات نسخه هستند. این فایلها را حذف کنید یا دسترسی به آنها را از طریق .htaccess مسدود کنید:
<FilesMatch "^(readme\.html|license\.txt|wp-config\.php)$">
Require all denied
</FilesMatch>
محدودکردن دسترسی به فایلهای XML-RPC
فایل xmlrpc.php بهعنوان یک نقطه ورود برای حملات brute-force و DDoS شناخته میشود. اگر از آن استفاده نمیکنید (مثلاً برای اتصال به اپلیکیشنهای موبایل)، آن را غیرفعال کنید. با افزودن کد زیر به .htaccess:
<Files xmlrpc.php>
Require all denied
</Files>
readme.html را باقی میگذارند. مهاجم میتواند با مراجعه مستقیم به /readme.html نسخه دقیق وردپرس را ببیند. همه منابع اطلاعات نسخه را پوشش دهید.جمعبندی و گامهای بعدی
امنیت وردپرس یک فرایند مداوم است. با اجرای گامهای زیر، سطح امنیتی سایت خود را بهطور چشمگیری افزایش میدهید:
- بهروزرسانی منظم هسته، افزونهها و قالبها
- محدودکردن ورود با رمز قوی، 2FA و محدودیت تلاشها
- تنظیم دسترسی فایلها به
644و پوشهها به755 - پنهانکردن نسخه وردپرس از همه منابع
- گرفتن بکاپ منظم و تست بازیابی
برای سایتهای پرترافیک یا حیاتی، استفاده از سرویسهای میزبانی که امنیت را در سطح زیرساخت فراهم میکنند، توصیه میشود. سرورنت بهعنوان ارائهدهنده هاست و زیرساخت ابری، محیطهایی با پیکربندی امنیتی بهینه برای وردپرس فراهم میکند که میتواند بخشی از استراتژی امنیتی شما باشد. اما به یاد داشته باشید، هیچ سرویسی جایگزین رعایت اصول امنیتی در سطح برنامه نمیشود. با اجرای این راهنما، سایت شما در برابر اکثر حملات رایج مقاوم خواهد بود.