قفل برنجی و زنجیر روی دروازهٔ توری سبز

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

سایت وردپرسی معمولاً از کجا هک می‌شود؟

گزارش «وضعیت امنیت وردپرس در ۲۰۲۶» از شرکت Patchstack این اعداد را برای سال ۲۰۲۵ می‌دهد:

موردعدد
ضعف امنیتی تازه در اکوسیستم وردپرس۱۱٬۳۳۴ مورد (۴۲ درصد بیشتر از ۲۰۲۴)
سهم افزونه‌ها۹۱ درصد
سهم قالب‌ها۹ درصد
ضعف ثبت‌شده در هستهٔ وردپرس۶ مورد، همه کم‌اهمیت
ضعف‌هایی که هنگام انتشار عمومی هنوز وصله نداشتند۴۶ درصد
میانهٔ زمان تا اولین سوءاستفاده، برای ضعف‌هایی که بیشترین حمله را دیدند۵ ساعت

از این جدول دو نتیجه می‌گیریم:

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

حمله‌ها بیشتر خودکار هستند. ربات‌ها اینترنت را برای نسخه‌های آسیب‌پذیر می‌گردند و برایشان فرقی نمی‌کند سایت شما کوچک است یا بزرگ.

هشت کاری که جلوی بیشتر مشکل‌ها را می‌گیرد

۱. هر چیزی را به‌روز نگه دارید

WordPress.org می‌گوید همیشه آخرین نسخهٔ وردپرس را داشته باشید. وردپرس به‌روزرسانی امنیتی و جزئی هسته را خودش در پس‌زمینه نصب می‌کند. برای افزونه‌ها و قالب‌ها هم می‌توانید در صفحهٔ «افزونه‌ها» به‌روزرسانی خودکار را روشن کنید.

نگرانی رایج این است که به‌روزرسانی سایت را خراب کند. راهش به‌روزرسانی نکردن نیست، بکاپ است. پیش از به‌روزرسانی بزرگ یک بکاپ دستی بگیرید (راهنمای بکاپ وردپرس).

۲. افزونهٔ اضافه نگه ندارید

  • افزونه‌ای که غیرفعال است هم روی سایت می‌ماند و می‌تواند آسیب‌پذیر باشد. اگر لازمش ندارید، حذفش کنید، نه فقط غیرفعال.
  • افزونه را از مخزن رسمی wordpress.org/plugins یا از سایت خود سازنده بگیرید.
  • از نسخه‌های «نال‌شده» (کرک‌شدهٔ افزونه‌های پولی) استفاده نکنید. کدشان دست‌کاری شده و ممکن است در پشتی داشته باشد، و به‌روزرسانی رسمی هم نمی‌گیرند.
  • پیش از نصب، تاریخ آخرین به‌روزرسانی و تعداد نصب فعال را در صفحهٔ افزونه ببینید. افزونه‌ای که سال‌ها به‌روز نشده، کنار گذاشتنی است.

۳. رمز قوی و یکتا بگذارید

WordPress.org می‌گوید رمز را با یک مولد رمز بسازید و از نام، نام کاربری، اسم سایت، کلمهٔ معمولی یا رمز فقط‌عددی استفاده نکنید. هر سرویس رمز جدا داشته باشد: هاست، پیشخوان، دیتابیس و ایمیل. یک مدیر رمز (Password Manager) این کار را راحت می‌کند.

نام کاربری مدیر را هم «admin» یا «webmaster» نگذارید، چون اولین چیزی است که حدس زده می‌شود.

۴. ورود دومرحله‌ای را روشن کنید

با ورود دومرحله‌ای، حتی اگر رمزتان لو برود، مهاجم به کد دوم هم نیاز دارد. وردپرس این قابلیت را داخل هسته ندارد. افزونهٔ رایگان Two Factor در مخزن وردپرس بیش از ۱۰۰ هزار نصب فعال دارد و کد یک‌بارمصرف اپلیکیشن، کد ایمیلی و کدهای پشتیبان را پشتیبانی می‌کند. دست‌کم برای حساب‌های مدیر روشنش کنید.

۵. تلاش‌های ورود را محدود کنید

بیشتر حمله‌ها به صفحهٔ ورود (wp-login.php) تلاش مکرر برای حدس رمز هستند. اگر هاستتان این را محدود نمی‌کند، افزونه‌ای که پس از چند تلاش ناموفق ورود را موقتاً می‌بندد کمک می‌کند. سایت‌های ویسا این محدودیت را از قبل دارند (بخش «امنیت در ویسا» را ببینید).

۶. کاربران کم و با دسترسی کم

  • فقط کسی که واقعاً لازم دارد، نقش «مدیر» بگیرد. نویسنده و ویراستار برای نوشتن کافی‌اند.
  • کاربر قدیمی و کسی که دیگر با شما کار نمی‌کند را حذف کنید.
  • هر نفر حساب خودش را داشته باشد، نه یک حساب مشترک.

۷. ویرایشگر فایل را ببندید

وردپرس در پیشخوان یک ویرایشگر کد برای قالب و افزونه دارد. اگر کسی به حساب مدیر برسد، با آن می‌تواند مستقیم کد مخرب بنویسد. با این خط در فایل wp-config.php آن را خاموش کنید:

define( 'DISALLOW_FILE_EDIT', true ); // wp-config.php

WordPress.org توضیح می‌دهد این خط راه آپلود فایل مخرب را نمی‌بندد، ولی بعضی حمله‌ها را سخت‌تر می‌کند. چند توصیهٔ دیگر همان راهنما:

  • پوشه‌ها را روی ۷۵۵ و فایل‌ها را روی ۶۴۴ بگذارید.
  • فایل wp-config.php فقط برای شما و وب‌سرور خواندنی باشد (۴۰۰ یا ۴۴۰).
  • سایت را با HTTPS باز کنید و اگر هاستتان اجازه می‌دهد از SFTP به‌جای FTP استفاده کنید.

۸. بکاپی داشته باشید که بازیابی‌اش را امتحان کرده‌اید

اگر همهٔ کارهای بالا را هم بکنید، باز ممکن است روزی مشکلی پیش بیاید. بکاپ تمیز و تازه تفاوت یک روز دردسر با از دست رفتن سایت است. جزئیات: بکاپ وردپرس؛ از چه چیزی، هر چند وقت، کجا و چطور برگردانیم.

امنیت در ویسا

چند مورد از همین فهرست در ویسا خودکار و روی همهٔ سایت‌هاست. به این دلیل که سایت هک‌شده فقط به خودش آسیب نمی‌زند و می‌تواند اعتبار کل دامنه را هم ببرد:

موردچه می‌کند
به‌روزرسانی خودکاربه‌روزرسانی امنیتی و جزئی هسته همیشه نصب می‌شود. افزونه‌ها و قالب‌ها هم خودکار به‌روز می‌شوند، مگر نسخه‌ای که می‌دانیم سایت را می‌شکند. نسخهٔ اصلی هسته (مثلاً ۷٫۱ به ۷٫۲) انتخاب خود شماست.
محدودیت ورودبعد از ۱۰ تلاش ناموفق از یک IP در ۱۵ دقیقه، ورود از آن IP برای ۱۵ دقیقه بسته می‌شود.
پیام خطای یکسان«نام کاربری اشتباه» و «رمز اشتباه» یک پیام می‌گیرند تا وجود کاربر لو نرود.
شمارش کاربرانآدرس ?author=N و فهرست کاربران در REST برای مهمان بسته است.
XML-RPCبسته است. این مسیر قدیمی، رایج‌ترین راه حدس رمز بود.
ویرایشگر فایلدر پیشخوان بسته است.
آپلود افزونه با فایل zipبسته است. نصب از مخزن وردپرس باز است و برای افزونهٔ دلخواه می‌توانید تیکت بزنید.
هدرهای امنیتی و نسخهٔ وردپرسهدرهای محافظ فعال‌اند و نسخهٔ وردپرس مخفی است.
دیتابیس جداهر سایت دیتابیس مستقل خودش را دارد (چرا مهم است؟).
بکاپ خودکارجزو هر پلن است. برنامهٔ هر پلن در راهنمای بکاپ آمده.

ورود دومرحله‌ای را خودتان روشن می‌کنید، همان افزونهٔ Two Factor. رمز قوی و حذف افزونهٔ اضافه هم کاری است که فقط شما می‌توانید بکنید. اگر سایتتان به XML-RPC نیاز دارد (مثلاً Jetpack یا اپ موبایل قدیمی وردپرس)، با پشتیبانی هماهنگ کنید.

اگر سایت هک شد، چه کنیم؟

نشانه‌ها: کاربر مدیر ناشناس، تغییر مسیر ناخواستهٔ بازدیدکننده‌ها، صفحه‌های اسپم که خودتان نساخته‌اید، یا هشدار هاست و مرورگر. ترتیب کار:

  1. سایت را موقتاً از دسترس خارج کنید (حالت تعمیر یا بستن دسترسی)، تا بازدیدکننده آسیب نبیند.
  2. همهٔ رمزها را عوض کنید: پیشخوان، هاست، دیتابیس، FTP و ایمیل مدیر. نشست‌های فعال را هم ببندید.
  3. بکاپ تمیز پیدا کنید، یعنی نسخه‌ای از پیش از شروع مشکل، و سایت را از آن برگردانید (مراحل بازیابی).
  4. همه‌چیز را به‌روز کنید و افزونه و قالب ناشناس را حذف کنید. اگر راه نفوذ را نبندید، همان ربات دوباره می‌آید.
  5. کاربران را بررسی کنید و هر حساب ناشناس را پاک کنید.
  6. اگر مطمئن نیستید، از پشتیبانی هاست کمک بگیرید.

مهم‌ترین نکته: بازگرداندن بکاپ بدون بستن راه نفوذ، فقط مشکل را چند روز عقب می‌اندازد.

سؤالات متداول

آیا افزونهٔ امنیتی لازم است؟

اول کارهای بالا را انجام دهید. افزونهٔ امنیتی جایگزین به‌روزرسانی و بکاپ نیست. اگر هاستتان محدودیت ورود و هدرهای امنیتی را ندارد، یک افزونهٔ معتبر مفید است. چند افزونهٔ امنیتی هم‌زمان نصب نکنید، چون با هم تداخل می‌کنند و خودشان بار اضافه‌اند.

سایت کوچک و کم‌بازدید هم هدف می‌شود؟

بله. حمله‌ها خودکارند و نسخهٔ آسیب‌پذیر را می‌گردند. سایت هک‌شده به کار مهاجم می‌آید، حتی اگر بازدید نداشته باشد: برای اسپم، فیشینگ یا پخش بدافزار.

مخفی کردن نسخهٔ وردپرس کافی است؟

نه. این کار فقط کار ربات را کمی سخت‌تر می‌کند و جایگزین به‌روزرسانی نیست. سایت‌های ویسا نسخه را مخفی می‌کنند، ولی اولویت اصلی همان به‌روزرسانی است.

چطور بفهمم افزونه‌ای آسیب‌پذیر است؟

پیشخوان در صفحهٔ «افزونه‌ها» از به‌روزرسانی‌های موجود خبر می‌دهد. برای ضعف‌های شناخته‌شده می‌توانید نام افزونه را در پایگاه Patchstack جست‌وجو کنید.

منابع

ح
حجت حسینی

حجت حسینی توسعه‌دهندهٔ وردپرس، برنامه‌نویس PHP و مدیر سیستم است. کارش نوشتن افزونه و قالب اختصاصی وردپرس، بهینه‌سازی سرعت سایت‌های وردپرسی و فروشگاه‌های ووکامرس، راه‌اندازی و نگهداری سرورهای لینوکس و کانتینرها با Docker و Kubernetes، و طراحی بکاپ و امنیت سایت است. در این وبلاگ از همین تجربه‌ها می‌نویسد: چطور سایت وردپرسی را بسازیم، سریع کنیم و سالم نگه داریم.