بیشتر سایتهای وردپرسی که هک میشوند، هدف یک مهاجم خاص نبودهاند. رباتهایی که شبانهروز اینترنت را میگردند، دنبال افزونهی قدیمی، رمز تکراری یا فایل آلودهی یک قالب نالشدهاند و هر سایتی را که پیدا کنند آلوده میکنند.
خبر خوب این است که جلوی بیشتر این حملهها با کارهای ساده گرفته میشود. این چکلیست پانزده کار را برای هاست اشتراکی سیپنل، به ترتیب اهمیت، مرتب کرده است.
امنیت وردپرس روی هاست اشتراکی از کجا شروع میشود؟#
از سه کار: بهروزرسانی منظم، ورود امن و پشتیبان بیرون از هاست. بقیهی موارد لایههای اضافهای هستند که احتمال عبور حمله را کمتر میکنند.
دیوار آتش (WAF) برنامهای است که درخواستهای مشکوک را پیش از رسیدن به سایت شناسایی و مسدود میکند. روی بسیاری از هاستهای اشتراکی، این لایه در سطح سرور فعال است و شما فقط باید مراقب لایههای داخلی باشید.
چطور ورود به پیشخوان را امن کنیم؟#
با رمز یکتا، ورود دومرحلهای، محدودکردن تلاش ورود و مرور منظم کاربران.
- رمز طولانی و یکتا. رمز مدیر وردپرس نباید جای دیگری استفاده شده باشد. از مدیر رمز استفاده کنید.
- ورود دومرحلهای. با یک افزونهی سبک برای همهی مدیران و ویرایشگران فعالش کنید.
- محدودکردن تلاش ورود. اگر هاست این کار را در سطح سرور انجام نمیدهد، با افزونه انجامش دهید.
- حداقل دسترسی لازم. نقش (Role) در وردپرس مجموعهای از دسترسیهاست که مشخص میکند کاربر چه کاری میتواند بکند. در کاربران ← همهی کاربران ببینید چه کسانی مدیرند؛ نویسنده به نقش مدیر نیاز ندارد و کاربران قدیمی را حذف کنید.
چرا بهروزرسانی مهمترین کار امنیتی است؟#
چون بیشتر نفوذها از آسیبپذیریهای شناختهشدهای است که وصلهشان منتشر شده ولی نصب نشده است.
- بهروزرسانی خودکار هسته. وردپرس نسخههای امنیتی و جزئی را بهطور پیشفرض خودکار نصب میکند؛ مطمئن شوید این رفتار خاموش نشده است.
- بهروزرسانی خودکار افزونهها. در افزونهها ← افزونههای نصبشده برای افزونههای معتبر گزینهی فعالسازی بهروزرسانی خودکار را بزنید. افزونههای حساس مثل فروشگاه را اول روی محیط آزمایشی بهروز کنید.
- حذف هر چیز استفادهنشده. افزونه و قالب غیرفعال هنوز روی هاست است و ممکن است مستقیم قابل سوءاستفاده باشد. فهرست کوتاه و لازم را در افزونههای ضروری وردپرس ببینید. قالب و افزونهی نالشده را هم هرگز نصب نکنید.
کدام تنظیمهای فایل و سرور لازم است؟#
چند خط در wp-config.php، چند خط در .htaccess و دسترسی درست فایلها. این بخش بیشترین اثر را با کمترین هزینه دارد.
- بستن ویرایشگر فایل و اجبار HTTPS در پیشخوان. این خطها را بالای خط پایان ویرایش در
wp-config.phpبگذارید:
// بستن ویرایشگر فایل قالب و افزونه در پیشخوان
define( 'DISALLOW_FILE_EDIT', true );
// ورود و پیشخوان فقط روی HTTPS
define( 'FORCE_SSL_ADMIN', true );- دسترسی فایلها. فایلها
644، پوشهها755وwp-config.phpروی640یا اگر هاست اجازه داد600. این کار را از File Manager با گزینهی Change Permissions انجام دهید. - بستن اجرای PHP در پوشهی بارگذاری. مهاجم معمولاً فایل PHP را به شکل تصویر بارگذاری میکند. یک فایل
.htaccessدرwp-content/uploadsبسازید:
<FilesMatch "\.(php|phtml|phar)$">
Require all denied
</FilesMatch>- محافظت از فایلهای حساس. این خطها را در
.htaccessریشه، بیرون از بلوک# BEGIN WordPressبگذارید. اگر از اپلیکیشن موبایل وردپرس یا سرویسی که به XML-RPC نیاز دارد استفاده میکنید، بخش دوم را نگذارید:
Options -Indexes
<Files wp-config.php>
Require all denied
</Files>
<Files xmlrpc.php>
Require all denied
</Files>اگر بعد از ذخیره خطای ۵۰۰ گرفتید، هاست اجازهی خط Options را نمیدهد؛ آن خط را بردارید.
- کلیدهای امنیتی. کلیدهای امنیتی (Salt) رشتههای تصادفی در
wp-config.phpهستند که کوکی ورود را رمز میکنند. بعد از هر نفوذ احتمالی، آنها را با مقدار تازه از سرویس رسمی تولید کلید وردپرس عوض کنید؛ همهی کاربران از حساب خارج میشوند.
بستن توابعی مثل exec روی هاست اشتراکی هم بخشی از همین لایه است؛ دلیلش را در توابع بستهی PHP روی هاست اشتراکی نوشتهایم.
پشتیبانگیری و پایش چطور باید باشد؟#
پشتیبان باید بیرون از همان هاست باشد و بازگرداندنش دستکم یک بار امتحان شده باشد.
- پشتیبان بیرون از هاست. بکآپی که روی همان هاست میماند، با هک یا خرابی هاست همراه سایت از دست میرود. برای دیتابیس بکآپ خودکار دیتابیس روی سیپنل را ببینید.
- ایمیل مدیر واقعی. در تنظیمات ← همگانی نشانی ایمیلی بگذارید که میخوانید؛ هشدارهای وردپرس و بازیابی رمز به آن میرسد.
- کلیدهای API با سقف مصرف. اگر افزونهی هوش مصنوعی یا چتبات دارید، کلید را با کمترین دسترسی و سقف هزینه بسازید. نکتههایش در چتبات پشتیبانی سایت وردپرسی آمده است.
دیوار آتش هاست با وردپرس چه تعاملی دارد؟#
بیشتر وقتها بیصدا کمک میکند و گاهی اشتباه میکند. دیوارهای آتش سطح سرور ممکن است ذخیرهی نوشتهای را که کد یا کلمهی خاصی دارد، یا درخواستهای پشتسرهم پیشخوان را، حمله تشخیص دهند و خطای ۴۰۳ برگردانند یا IP شما را موقتاً ببندند.
راه درست خاموشکردن آن نیست. زمان دقیق، آدرس صفحه و پیام خطا را برای پشتیبانی هاست بفرستید تا همان قاعده را برای سایت شما استثنا کنند. اگر با خطاهای دیگر روبهرو شدید، رفع خطاهای رایج وردپرس کمک میکند.
اگر سایت هک شد چه کنیم؟#
- رمز سیپنل، دیتابیس، FTP و همهی مدیران را عوض کنید.
- سایت را از آخرین پشتیبان سالم برگردانید.
- هسته، قالب و افزونهها را بهروز کنید و کلیدهای امنیتی را عوض کنید.
- کاربران مدیر ناشناس و فایلهای PHP داخل پوشهی بارگذاری را بررسی کنید.
- علت نفوذ را پیدا کنید، وگرنه چند روز بعد تکرار میشود.
آیندهی امنیت وردپرس#
روندهای اصلی روشناند: بهروزرسانی خودکار عادیتر میشود، ورود بدون رمز و ورود دومرحلهای جای رمز تنها را میگیرد و دیوار آتش بیشتر به لایهی هاست و شبکه منتقل میشود. در طرف مقابل، حملههای خودکار ارزانتر و گستردهتر شدهاند و حمله از راه افزونههای آسیبپذیر یا رهاشده همچنان راه اصلی نفوذ است.
برای آمادهبودن:
- هاستی انتخاب کنید که دیوار آتش و اسکن بدافزار سطح سرور دارد.
- ورود دومرحلهای را همین حالا برای همهی مدیران اجباری کنید.
- هر چند ماه یک بار فهرست کاربران، افزونهها و بازگرداندن پشتیبان را امتحان کنید.
خلاصه#
- بهروزرسانی، ورود امن و پشتیبان بیرون از هاست پایهی امنیتاند.
- ویرایشگر فایل را ببندید و اجرای PHP را در پوشهی بارگذاری غیرفعال کنید.
- افزونه و قالب استفادهنشده و نالشده را حذف کنید.
- با خطای دیوار آتش هاست، استثنا بخواهید، نه خاموشکردن.
- بعد از هک، اول رمزها، بعد بازگرداندن، بعد پیدا کردن علت.