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

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

چرا وردپرس هدف محبوب حملات است؟

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

  1. اکوسیستم باز: هزاران افزونه و قالب، که کیفیتشان یکسان نیست.
  2. خودکارسازی حملات: ربات‌های اسکنر می‌توانند در عرض چند دقیقه هزاران سایت را برای آسیب‌پذیری‌های شناخته‌شده بررسی کنند.
  3. ایندکس‌شدن در گوگل: سایت‌های وردپرسی به‌سادگی در گوگل پیدا می‌شوند. یعنی «قربانی‌های بالقوه» بی‌دردسر در دسترس مهاجم هستند.

حالا تصور کنید که اگر همین سیستم، یک روتین امنیتی ساده را دنبال کند، تقریباً به سطح امنیتی بالایی می‌رسد — چون نقطه‌ی ضعف اکثر سایت‌ها، خودِ سیستم نیست، بلکه تنظیمات پیش‌فرضِ نادرست و غفلتِ انسانی است.

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

یک حقیقت مهم: هک شدن سایت شما، کار شما نیست

بسیاری از کاربران مبتدی، وقتی سایتشان هک می‌شود، اولین واکنششان این است که به خودشان شک کنند: «حتماً کار اشتباهی کرده‌ام». این قضاوت، همیشه درست نیست. اکثر سایت‌هایی که در پروژه‌های مختلف دیده‌ام هک شده‌اند، کار اشتباه خاصی نکرده بودند؛ فقط یکی از چند چیز را نادیده گرفته بودند:

  • یک افزونه‌ی قدیمی که ماه‌ها آپدیت نشده بود.
  • یک کاربر فراموش‌شده که از یک پروژه‌ی قبلی باقی مانده بود.
  • یک قالب نال‌شده که روز اول «کار می‌کرد» ولی یک backdoor کوچک هم داشت.

هدف این راهنما این نیست که شما را بترساند؛ هدفش این است که یک مسیر روشن، بدون پیچیدگی غیرضروری پیش پایتان بگذارد. حتی اگر فقط پنج گام از ده گام این راهنما را اجرا کنید، از ۸۰٪ سایت‌های وردپرسی اطرافتان امن‌تر خواهید بود.

از نگاه مهاجم: پنج رخنه‌ی رایج در سایت‌های مبتدی

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

رخنهچگونه بهره‌برداری می‌شود
رمز ضعیف یا نام کاربری adminحمله‌ی Brute Force با حدس ترکیب‌های ساده
افزونه‌ی آپدیت‌نشدهاستفاده از آسیب‌پذیری شناخته‌شده‌ی نسخه‌ی قدیمی
کاربر فراموش‌شده با نقش ادمینورود با رمز ضعیف، دسترسی کامل
افزونه یا قالب نال‌شدهbackdoor از روز اول نصب
wp-config با مجوز اشتباهخواندن اطلاعات دیتابیس

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

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

حالا، گام‌های اصلی. ترتیب این گام‌ها، از «بیشترین تأثیر با کمترین تلاش» به «کمترین تأثیر با بیشترین تلاش» است. حتی اگر فقط سه گام اول را اجرا کنید، سطح امنیت سایتتان به‌طور محسوس بالا می‌رود.

  1. امن‌سازی ورود به پیشخوان
  2. قفل کردن فایل wp-config
  3. مدیریت کاربران و نقش‌ها
  4. بازرسی قالب و افزونه‌ها
  5. بکاپ‌گیری خودکار
  6. فعال‌سازی SSL و HTTPS

برویم سراغ تک‌تک این گام‌ها.

گام اول: امن‌سازی ورود به پیشخوان

صفحه‌ی ورود وردپرس، اولین و مهم‌ترین نقطه‌ی حمله است. سه اقدام ساده، این در را کاملاً امن می‌کند:

  1. تغییر نام کاربری ادمین از admin: اکثر حملات Brute Force، با حدس admin شروع می‌کنند. اگر نام کاربری شما چیز دیگری باشد، یک لایه‌ی امنیتی اضافه ساخته‌اید. مسیر عملی در چگونه ورود ادمین وردپرس را امن کنیم.
  2. محدودسازی تلاش‌های ناموفق: بعد از پنج تلاش خطا، دسترسی موقتاً قفل شود. راه‌حل کامل در چگونه حملات brute force را در وردپرس دفع کنیم.
  3. فعال‌سازی احراز هویت دو مرحله‌ای (2FA): بعد از فعال‌سازی، حتی اگر رمز شما لو برود، مهاجم بدون کد دوم نمی‌تواند وارد شود. مسیر گام‌به‌گام در فعال‌سازی 2FA برای کاربران وردپرس.

یک تجربه‌ی شخصی: در یکی از پروژه‌ها، سایت مشتری هر شب ده‌ها تلاش ورود ناموفق داشت. بعد از فعال‌سازی 2FA، این تلاش‌ها ادامه داشت ولی بی‌نتیجه بود. تفاوت واقعی بین «امنیت مطلق» و «امنیت عملی» همین‌جاست — شما نمی‌توانید جلوی تلاش مهاجم را بگیرید، ولی می‌توانید جلوی موفقیتش را بگیرید.

گام دوم: قفل کردن فایل wp-config

فایل wp-config.php، حساس‌ترین فایل وردپرس است. اطلاعات اتصال به دیتابیس، کلیدهای امنیتی و تنظیمات اصلی در آن زندگی می‌کنند. اگر مهاجم به این فایل دسترسی پیدا کند، عملاً به کل سایت دسترسی دارد.

دو اقدام مهم:

  1. محدودسازی مجوز فایل: مجوز این فایل باید روی 600 یا 640 باشد، نه 644 یا 666. این کار را می‌توانید از طریق File Manager در پنل هاست انجام دهید. جزئیات بیشتر در چگونه فایل wp-config را امن کنیم.
  2. غیرفعال کردن ویرایشگر فایل از پیشخوان: یک خط کد، جلوی کلاسیک‌ترین حمله‌ی «ویرایش کد از پیشخوان» را می‌گیرد. این خط را در فایل wp-config.php، قبل از جمله‌ی «رابطه، همین‌جا تمام می‌شود» اضافه کنید:
define( 'DISALLOW_FILE_EDIT', true );

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

گام سوم: مدیریت کاربران و نقش‌ها

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

نقشچه کسی باید داشته باشد
Administratorفقط ۱ یا ۲ نفر
Editorمدیر محتوا
Authorنویسنده‌ها
Contributorمهمان‌نویس
Subscriberکاربران عضو

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

گام چهارم: قالب و افزونه‌ها را بازرسی کنید

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

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

یک نکته‌ی مهم: برای نصب افزونه‌ی جدید، از چک‌لیست پیش از نصب استفاده کنید. تعداد افزونه‌های فعال روی سایت، هرچه کمتر باشد، سطح حمله کمتر است. در بهترین افزونه‌های امنیتی وردپرس برای محافظت از سایت، افزونه‌های ضروری را معرفی کرده‌ام — بدون اضافه‌بار.

گام پنجم: بکاپ بگیرید (قبل از هر اتفاق)

بکاپ، به‌نوعی «بیمه» ی سایت شماست. اگر همه‌ی گام‌های دیگر شکست بخورند، بکاپ سالم می‌تواند سایت شما را به حالت قبل برگرداند. سه اصل بکاپ درست:

  1. بیرون از هاست: بکاپی که روی همان هاست ذخیره شده، در صورت از دست رفتن هاست، از دست می‌رود.
  2. منظم و خودکار: بکاپ دستی، فراموش می‌شود. باید زمان‌بندی‌شده و خودکار باشد.
  3. تست‌شده: حداقل یک‌بار بازیابی را در محیط تست تمرین کنید.

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

گام ششم: SSL و HTTPS را فعال کنید

SSL، لایه‌ی رمزنگاری بین مرورگر کاربر و سرور شماست. بدون آن، همه‌ی اطلاعات (نام کاربری، رمز، فرم‌ها) قابل شنود است. اگر سایت شما هنوز روی HTTP است، اولویت اولتان این است که SSL سایت را نصب و فعال کنید. مسیر هدایت HTTP به HTTPS هم در ریدایرکت HTTP به HTTPS چگونه انجام می‌شود توضیح داده شده است.

خبر خوب این است: SSL امروز تقریباً رایگان است. اکثر هاست‌ها، SSL رایگان ارائه می‌دهند و فقط باید در پنل هاست یک دکمه را بزنید. نقش کامل SSL در امنیت سایت در SSL چیست و چرا سایت به آن نیاز دارد آمده است.

سه عادت ماهانه که همه‌چیز را عوض می‌کند

امنیت یک‌بار انجام‌شدنی نیست. سه عادت ساده هستند که اگر ماهانه اجرا شوند، سایت شما را در وضعیت امنیتی مطلوب نگه می‌دارند:

  1. مرور کاربران: هر ماه، صفحه‌ی کاربران را باز کنید و اگر کاربر جدید یا مشکوکی دیدید، بررسی کنید.
  2. آپدیت ماهانه: آخر هر ماه، همه‌ی هسته، قالب و افزونه‌ها را آپدیت کنید. قبلش بکاپ بگیرید.
  3. پایش لایه‌ی بیرونی: با ابزاری مثل Google Search Console، هر ماه سایت خود را بررسی کنید. اگر گوگل علامت‌گذاری ناگهانی زد، مشکوک شوید.

تجربه‌ی من می‌گوید سه عادت ماهانه‌ی بالا، از هر ابزار پیچیده‌تری مؤثرترند. چون در حوزه‌ی امنیت، ثبات در اقداماتِ کوچک، از یک اقدام بزرگِ یک‌بار مصرف قوی‌تر است.

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

این لحظه‌ای است که هیچ‌کس دوست ندارد به آن برسد، ولی دانستن ترتیب مراحل در آن، تفاوت بین «یک روز تعمیر» و «دو هفته کابوس» است:

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

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

نگاهی فراتر از چک‌لیست

برای کسی که سال‌ها در حوزه‌ی امنیت سیستم‌های وب کار کرده، «امنیت وردپرس» یک وضعیتِ ساده‌ی چک‌لیستی نیست. در چارچوب‌های جدی مهندسی، امنیت یک تعادلِ پیوسته بین دو نیروی مخالف است: کاربری که می‌خواهد هرچه سریع‌تر و راحت‌تر کارش را انجام دهد، و مهاجمی که می‌خواهد از همان سرعت و راحتی سوءاستفاده کند. هر تصمیم امنیتی، در واقع کاهشِ یکی از این دو به قیمت دیگری است. سخت‌کردن ورود، همیشه به قیمت تجربه‌ی کاربری تمام می‌شود. حتی 2FA، با تمام ارزشش، یک قدم اضافه برای کاربر است.

در این تعادل، سه اصل وجود دارد که از دنیای سیستم‌های حساس آمده و روی هر سایت وردپرسی هم قابل اعمال است:

  • Principle of Least Privilege: هر کاربر و هر مؤلفه، فقط همان دسترسی که لازم دارد. همان قاعده‌ای که در گام سوم این راهنما دیدیم — ولی در سطح کد هم قابل اعمال است: پلاگین‌هایی که فقط برای نمایش طراحی شده‌اند، نباید به دیتابیس دسترسی نوشتنی داشته باشند.
  • Defense in Depth: اگر یک لایه شکست، لایه‌ی بعدی مانع شود. در وردپرس، این یعنی 2FA + محدودسازی ورود + فایروال + بکاپ. هیچ‌کدام کافی نیستند، همه در کنار هم مؤثرند.
  • Fail-safe & Recoverable: اگر همه‌چیز شکست خورد، باید بتوانید به حالت سالم قبلی برگردید. بکاپ، تبلور همین اصل است. اما در سطح کد هم قابل اعمال است: هر تغییری باید قابل بازگشت باشد، و برای همین است که در بکاپ‌گیری این‌قدر تأکید کردم که قبل از هر تغییر، نسخه‌ی پشتیبان داشته باشید.

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

یک کلمه پایانی برای مبتدی‌ها

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

قدم عملی امشب‌تان: صفحه‌ی «کاربران» پیشخوان را باز کنید و هر حساب فراموش‌شده‌ای که در آن می‌بینید، حذف کنید. این کار، بدون هیچ ابزار اضافی، پرتکرارترین ورودی هک را می‌بندد. اگر همین یک کار را انجام دهید، سایت شما در وضعیت بهتری از اکثر سایت‌های وردپرسی جهان قرار می‌گیرد.

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