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

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

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

  • رمز ضعیف یا تکراری ادمین: ساده‌ترین و شایع‌ترین دروازه. حمله از طریق تلاش مکرر (Brute Force) یا استفاده از رمزهای لو رفته در سایت‌های دیگر انجام می‌شود.
  • افزونه یا قالب با نسخه قدیمی: هر نسخه آسیب‌پذیر، یک دروازه باز برای مهاجم است.
  • افزونه و قالب نال: نسخه‌های کرک‌شده، کلاسیک‌ترین کانال ورود کد مخرب هستند. راهنمای تشخیص در دانلود افزونه مطمئن.
  • پیکربندی اشتباه سرور: مجوز فایل‌های باز، ویرایشگر فایل فعال و دسترسی خارجی به دیتابیس.
  • ورود از طریق FTP یا SSH ضعیف: رمز ساده یا نبود محدودیت IP در این سرویس‌ها، کانال مستقیم برای مهاجم است.

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

هک شدن سایت، مثل دزدیدن خانه نیست؛ مثل پیدا کردن کلید زیر قالیچه است. راه‌حل، بردن خانه به قفس نیست؛ برداشتن کلید از زیر قالیچه است.

ذهنیت درست: بستن دروازه‌ها به‌جای پنهان کردن سایت

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

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

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

گام اول: سخت‌سازی ورود و کاربران

اولین و مهم‌ترین دروازه، ورود است. سه اقدام که در پروژه‌ها بدون استثنا اجرا می‌کنم:

  • رمزهای قوی و منحصربه‌فرد: هر کاربر، رمز خودش؛ ترکیب حداقل ۱۶ کاراکتر شامل حروف بزرگ و کوچک، عدد و نماد. رمز ادمین باید از مدیر رمز عبور تولید شود، نه از حافظه. اصول در مدیریت رمز عبور امن.
  • احراز هویت دو مرحله‌ای (2FA): برای همه نقش‌های مدیریتی و ویرایشی. راهنمای گام‌به‌گام در فعال‌سازی 2FA برای کاربران وردپرس و تأثیر 2FA بر امنیت.
  • محدودسازی تلاش ورود ناموفق: پنج تلاش خطا، قفل ده‌دقیقه‌ای. در محدودسازی ورود ناموفق در وردپرس و دفع حملات Brute Force آمده است.
  • حذف کاربران غیرفعال: هر کاربری که در شش ماه گذشته وارد نشده، یا حذف شود یا نقشش کاهش پیدا کند.
  • حذف کاربر admin: نام کاربری پیش‌فرض، اولین چیزی است که اسکنرها امتحان می‌کنند.

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

گام دوم: به‌روزرسانی منظم و حذف بی‌رحمانه

افزونه‌ها و قالب‌ها، دومین دروازه بزرگ هستند. سه اقدام در این گام:

  1. به‌روزرسانی منظم هسته، قالب و افزونه‌ها: پیش از هر آپدیت، بکاپ بگیرید و در محیط staging تست کنید. راهنمای آزمایش امن در بهترین روش تست قالب.
  2. حذف افزونه‌ها و قالب‌های بلااستفاده: غیرفعال‌کردن کافی نیست؛ فایل‌ها باید حذف شوند، چون آسیب‌پذیری‌شان حتی در حالت غیرفعال هم قابل استفاده است. ریسک‌ها در آسیب‌پذیری افزونه‌های وردپرس.
  3. بررسی امنیتی قالب و افزونه: پیش از نصب و در طول نگهداری، فایل‌های حساس را بازبینی کنید. چک‌لیست در بررسی امنیت قالب و افزونه وردپرس.

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

گام سوم: مجوزها، wp-config و ویرایشگر فایل

سخت‌سازی سرور، سومین دروازه است. سه اقدام عملی:

  • مجوز فایل‌ها و پوشه‌ها: پوشه‌ها با 755، فایل‌ها با 644. اگر خطاهای مربوط به دسترسی دارید، در رفع خطاهای دسترسی فایل در وردپرس راهنمای کامل آمده است.
  • غیرفعال‌کردن ویرایشگر فایل در پیشخوان: افزودن define('DISALLOW_FILE_EDIT', true); به فایل wp-config.php. اگر مهاجم به پیشخوان دسترسی پیدا کند، جلوی ویرایش مستقیم فایل‌ها را می‌گیرد. جزئیات در امن‌سازی فایل wp-config.
  • غیرفعال‌کردن یا محدودسازی xmlrpc.php: مسیر حمله محبوبی برای مهاجمان که در بیشتر مواقع استفاده نمی‌شود.
  • بستن دسترسی خارجی دیتابیس: اگر سایت از یک سرور به دیتابیس وصل می‌شود، پورت دیتابیس نباید به همه اینترنت باز باشد. راهنما در محدودسازی دسترسی خارجی دیتابیس.
  • هدرهای امنیتی HTTP: هدرهایی مثل X-Frame-Options، X-Content-Type-Options و Content-Security-Policy که بخش بزرگی از حملات سمت مرورگر را دفع می‌کنند. جزئیات در هدرهای امنیتی HTTP.

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

گام چهارم: پشتیبان‌گیری به‌عنوان آخرین دیوار دفاعی

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

  • پشتیبان بیرون از هاست: پشتیبان روی همان سرور، در برابر هک سرور از بین می‌رود.
  • نسخه‌بندی پشتیبان: حداقل پنج نسخه گذشته نگه‌داری شود؛ اگر آخرین نسخه آلوده بود، به نسخه قدیمی‌تر برگردید. راهنما در چند نسخه بکاپ نگه‌داری کنیم.
  • تست بازیابی دوره‌ای: پشتیبانی که بازیابی نشده، ارزش خود را اثبات نکرده است. راهنمای گام‌به‌گام در بازیابی سایت از بکاپ.

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

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

گام پنجم: پایش و هشدار زودهنگام

پس از بستن دروازه‌ها، پایش مستمر، لایه اطمینان است. سه سطح پایش در پروژه‌ها:

  1. پایش ورود: هشدار برای ورود از IP جدید، ورود ناموفق مکرر یا ورود در ساعت غیرعادی. راهنمای لاگ‌ها در بررسی لاگ حملات سایت.
  2. پایش فایل‌ها: بررسی دوره‌ای فایل‌های تغییر‌یافته و اسکن بدافزار. نشانه‌های آلودگی در علائم هک و بدافزار در وردپرس.
  3. پایش عملکرد: هشدار برای uptime، نوسان ترافیک و خطاهای ۵xx که می‌توانند نشانه حمله باشند.

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

اشتباهات رایج در محافظت از سایت در برابر هک

در پروژه‌هایی که محافظت از سایت پیگیری شده، چند الگوی تکراری دیده‌ام:

  • تغییر URL ورود بدون رمز قوی: تغییر مسیر ورود، اثر محدودی دارد؛ اگر رمز ساده باشد، مهاجم مسیر را پیدا می‌کند.
  • نصب چند افزونه امنیتی با هم: تعارض بین افزونه‌ها، نه‌فقط امنیت را افزایش نمی‌دهد، گاهی خودش حفره تازه می‌سازد.
  • به‌روزرسانی بدون بکاپ: اگر آپدیت سایت را بشکند، راهی برای برگشت نیست. بکاپ قبل از آپدیت الزامی است.
  • فراموش کردن کاربران قدیمی: کاربر ادمینی که سال‌ها وارد نشده، دروازه‌ای است که کسی به آن نگاه نمی‌کند.
  • بی‌توجهی به افزونه‌های غیرفعال: آسیب‌پذیری افزونه غیرفعال هم قابل بهره‌برداری است؛ حذف فایل‌ها الزامی است.
  • اعتماد به پشتیبان هاست: اگر هاست هک شود، پشتیبان هاست هم از دست می‌رود. پشتیبان بیرونی مستقل لازم است.
  • نبود تست بازیابی: پشتیبانی که بازیابی نشده، در روز حادثه معلوم می‌شود که بی‌استفاده است.
  • بی‌توجهی به دسترسی FTP و SSH: این دو کانال، اغلب با رمزهای ضعیف و بدون محدودیت IP رها می‌شوند.
  • نادیده گرفتن هشدارهای امنیتی گوگل: هشدار در Search Console، اولین سیگنال هک است؛ اگر نادیده گرفته شود، خسارت بزرگ‌تر می‌شود.

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

پرسش‌های پرتکرار درباره محافظت از هک

  • چگونه سایت را از هک محافظت کنیم؟ با سخت‌سازی ورود (رمز قوی، 2FA، محدودسازی تلاش لاگین و حذف کاربران غیرفعال)، به‌روزرسانی منظم و حذف افزونه‌ها و قالب‌های بلااستفاده، تنظیم مجوز فایل و غیرفعال‌سازی ویرایشگر فایل در پیشخوان، پشتیبان‌گیری بیرونی نسخه‌بندی‌شده با تست دوره‌ای و پایش مستمر ورود، فایل‌ها و عملکرد.
  • آیا تغییر URL ورود کافی است؟ نه. تغییر URL ورود فقط یک لایه است. اگر رمز ساده باشد، مهاجم از مسیر دیگری وارد می‌شود. سخت‌سازی ورود باید با رمز قوی، 2FA و محدودسازی تلاش لاگین ترکیب شود.
  • بهترین افزونه امنیتی برای وردپرس کدام است؟ افزونه واحد وجود ندارد؛ ترکیب یک افزونه فایروال و اسکنر بدافزار با محدودسازی لاگین و پشتیبان‌گیری، امنیت را بهتر تأمین می‌کند. نمونه‌های معتبر در بهترین افزونه‌های امنیتی وردپرس آمده است.
  • آیا پشتیبان هاست برای محافظت کافی است؟ نه. اگر هاست هک شود، پشتیبان روی همان هاست هم ممکن است از دست برود. پشتیبان بیرونی مستقل، با نسخه‌بندی و تست بازیابی، الزامی است.
  • هر چند وقت یک‌بار باید امنیت را بازبینی کنیم؟ هر سه ماه یک بازبینی کامل و پایش هفتگی برای رویدادهای غیرعادی. پس از هر آپدیت بزرگ یا افزودن افزونه جدید، بازبینی سریع توصیه می‌شود.

امنیت، حالت همیشگی سایت

محافظت از سایت در برابر هک، مانند حفظ سلامت بدن است: نه یک واکسن یک‌باره، بلکه مجموعه‌ای از عادت‌های روزمره که در طول زمان اثر می‌گذارند. تجربه‌ام می‌گوید سایت‌هایی که این پنج گام را در چرخه نگهداری خود گنجانده‌اند، بسیار کمتر از سایت‌هایی که به امنیت به‌عنوان پروژه یک‌باره نگاه می‌کنند، در معرض حادثه قرار می‌گیرند. اگر امروز فقط یک کار می‌کنید، همین حالا رمز ادمین سایت خودتان را عوض کنید و 2FA را فعال کنید. اگر در پروژه‌ای حادثه هک را پشت سر گذاشته‌اید، برای من جالب است بدانید مهاجم از کدام دروازه وارد شده و کدام اقدام بعدی، بازگشت را متوقف کرد؛ تجربه‌تان را در دیدگاه‌ها بنویسید تا برای خواننده بعدی، مسیر روشن‌تری ساخته شود. 🛡️