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

این راهنما گام به گام شما را از تشخیص اینکه آیا واقعاً هک شده‌اید تا پاک‌سازی کامل و جلوگیری از تکرار هدایت می‌کند.

نشانه‌های هک شدن سایت

بعضی نشانه‌ها واضح هستند و بعضی دیگر را باید بدانید دنبالشان بگردید.

نشانه‌های آشکار

  • ریدایرکت به سایت‌های مشکوک — سایت‌های pharma spam، کازینو یا محتوای نامناسب
  • محتوای عجیب که شما قرار نداده‌اید روی صفحات ظاهر شده
  • هشدار گوگل "This site may be hacked" در نتایج جستجو
  • پیام هشدار قرمز مرورگر هنگام ورود به سایت
  • اطلاعیه از Google Search Console که سایت آلوده شناخته شده

نشانه‌های پنهان‌تر

  • کاربران ادمین جدید ناشناس در داشبورد
  • کندی غیرعادی سرور — cryptomining malware CPU می‌خورد
  • ایمیل‌های اسپم که از سرور شما ارسال می‌شوند
  • فایل‌های PHP جدید در پوشه uploads — این نشانه webshell است
  • لینک‌های مخفی در محتوا که در مرورگر نمایش داده نمی‌شوند اما گوگل‌بات می‌بیند
  • افزایش ناگهانی ترافیک از کشورها یا منابعی که مشتریان شما نیستند

مرحله ۱: وضعیت را ارزیابی کنید

قبل از هر اقدامی، یک تصویر کامل از وضعیت داشته باشید. این چند دقیقه ارزش دارد:

  • چه صفحاتی آلوده هستند؟ همه یا بعضی؟
  • از کِی این مشکل وجود دارد؟ آخرین باری که سایت سالم بود کِی بود؟
  • آیا در Google Search Console هشداری وجود دارد؟ (Security Issues)
  • چه تغییراتی اخیراً انجام شده؟ آپدیت افزونه، نصب قالب جدید، تغییر هاست؟
  • آیا سایت‌های دیگر روی همان سرور هم آلوده هستند؟

مرحله ۲: سایت را ایزوله کنید

برای جلوگیری از آسیب بیشتر به بازدیدکنندگان:

  • سایت را در حالت maintenance قرار دهید — یک فایل .htaccess ساده که همه را به صفحه maintenance هدایت می‌کند
  • اگر ریدایرکت مخرب دارید که بازدیدکنندگان را به سایت‌های نامناسب می‌فرستد، DNS را موقتاً به یک صفحه ساده تغییر دهید
  • دسترسی FTP و کنترل‌پنل را تا حد امکان از IP های ناشناخته محدود کنید

مرحله ۳: همه رمزها را فوری عوض کنید

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

  • رمز ادمین وردپرس یا CMS: همه کاربران با سطح دسترسی بالا
  • رمز دیتابیس: و wp-config.php (یا فایل تنظیمات اپلیکیشن) را به‌روز کنید
  • رمز FTP/SFTP
  • رمز کنترل‌پنل هاست (cPanel/DirectAdmin/Plesk)
  • رمز ایمیل‌های مرتبط با سایت
  • رمز سرویس‌های ابری مثل Cloudflare، CDN یا هر سرویس connected

برای وردپرس، کلیدهای Authentication Secrets در wp-config.php را هم تغییر دهید. این کار همه session های فعال (از جمله session هکر) را باطل می‌کند. کلیدهای جدید از https://api.wordpress.org/secret-key/1.1/salt/ بگیرید.

مرحله ۴: از وضعیت فعلی بکاپ بگیرید

این قدم شاید عجیب به نظر برسد — چرا از سایت آلوده بکاپ بگیریم؟ چند دلیل دارد:

  • ممکن است نیاز باشد بعداً نمونه بدافزار را برای تحلیل داشته باشید
  • فایل‌های media و uploads که سالم هستند را می‌خواهید نگه دارید
  • بکاپ دیتابیس برای بازیابی محتوا لازم است

این بکاپ را کاملاً جداگانه نگه دارید و از آن برای بازگردانی سایت استفاده نکنید — آلوده است.

مرحله ۵: اسکن و شناسایی بدافزار

اسکن با ابزارهای آنلاین

قبل از ورود به سرور، با ابزارهای آنلاین وضعیت را ارزیابی کنید:

  • Google Safe Browsing: آدرس https://transparencyreport.google.com/safe-browsing/search — وضعیت سایت را در Google Safe Browsing نشان می‌دهد
  • Sucuri SiteCheck: اسکن رایگان آنلاین که بدافزار شناخته‌شده، blacklist status و مشکلات امنیتی را تشخیص می‌دهد
  • VirusTotal: URL سایت را با ده‌ها آنتی‌ویروس بررسی می‌کند

اسکن با افزونه (برای وردپرس)

  • Wordfence: یک اسکن کامل انجام دهید. فایل‌های core وردپرس را با نسخه اصلی مقایسه می‌کند و تغییرات مشکوک را نشان می‌دهد
  • Sucuri Security: اسکن integrity و بررسی blacklist

بررسی دستی فایل‌ها

با FTP یا مدیر فایل هاست، این موارد را بررسی کنید:

  • فایل‌های PHP در پوشه uploads — این پوشه نباید فایل PHP داشته باشد
  • فایل‌های با نام‌های مشکوک یا شبیه فایل‌های سیستمی با غلط‌تایپ (مثل wp-includ3s)
  • فایل‌های اخیراً تغییریافته — در مدیر فایل Sort by Date Modified کنید
  • کدهای مشکوک در فایل‌های PHP: base64_decode، eval(، gzinflate، str_rot13

مرحله ۶: پاک‌سازی سایت

روش توصیه‌شده: نصب تازه

امن‌ترین روش برای اطمینان از پاک‌سازی کامل:

  1. هسته وردپرس را حذف و از wordpress.org دوباره دانلود و نصب کنید
  2. تمام افزونه‌ها را حذف و از منبع رسمی دوباره نصب کنید
  3. قالب را حذف و از منبع رسمی دوباره نصب کنید
  4. فقط پوشه wp-content/uploads را از سایت آلوده نگه دارید — و آن را هم اسکن کنید
  5. wp-config.php جدید با رمزهای دیتابیس جدید بسازید
  6. .htaccess جدید بسازید

روش دستی برای کاربران پیشرفته

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

  • فایل‌های core وردپرس را با نسخه تمیز مقایسه و جایگزین کنید
  • فایل‌های افزونه‌ها و قالب‌ها را از منبع رسمی جایگزین کنید
  • فایل‌های اضافه‌شده (backdoor ها) را پیدا و حذف کنید
  • از ابزار WP-CLI برای بررسی checksum هسته: wp core verify-checksums

مرحله ۷: دیتابیس را پاک کنید

بدافزار اغلب در دیتابیس هم ردپا می‌گذارد و این قدم فراموش می‌شود:

  • کاربران مشکوک: در داشبورد وردپرس یا phpMyAdmin، هر کاربر با نقش administrator که نمی‌شناسید را حذف کنید
  • لینک‌های مخفی: در جداول wp_posts و wp_postmeta به دنبال لینک به سایت‌های مشکوک بگردید
  • کد مخرب در options: جدول wp_options را بررسی کنید — به خصوص ردیف‌هایی با نام‌های عجیب یا کدهای رمزگذاری‌شده

در phpMyAdmin می‌توانید با SQL جستجو کنید:

  • SELECT * FROM wp_options WHERE option_value LIKE '%eval(%';
  • SELECT * FROM wp_posts WHERE post_content LIKE '%base64_decode%';

مرحله ۸: راه نفوذ را ببندید

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

  • افزونه یا قالب آسیب‌پذیر: کدام افزونه آپدیت نشده بود؟ آپدیت کنید یا حذف کنید
  • افزونه نال‌شده (cracked): اگر از قالب یا افزونه کرک‌شده استفاده کردید، این احتمالاً منبع هک بوده. فوراً حذف کنید و نسخه اصل بخرید
  • رمز ضعیف: تمام رمزها را در مرحله ۳ عوض کردید. حالا مطمئن شوید رمزهای جدید قوی هستند
  • هاست ناامن: اگر سایت‌های دیگر روی همان سرور یا cPanel هم آلوده هستند، مشکل از سطح سرور است — با هاست تماس بگیرید

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

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

  • 2FA (احراز هویت دو مرحله‌ای) را برای همه کاربران ادمین فعال کنید
  • یک افزونه فایروال (Wordfence یا معادل) نصب کنید
  • تعداد تلاش‌های ورود ناموفق را محدود کنید — Limit Login Attempts
  • آدرس پیش‌فرض ورود (/wp-admin) را تغییر دهید
  • بکاپ خودکار روزانه را تنظیم کنید و بکاپ‌ها را روی storage مجزا نگه دارید
  • همه افزونه‌ها، قالب‌ها و هسته CMS را آپدیت کنید
  • افزونه‌هایی که استفاده نمی‌کنید را کاملاً حذف کنید — غیرفعال کردن کافی نیست

مرحله ۱۰: درخواست بررسی مجدد از گوگل

اگر گوگل سایت را flagged کرده یا از نتایج جستجو حذف کرده:

  1. وارد Google Search Console شوید
  2. بخش Security Issues را باز کنید
  3. بعد از پاک‌سازی کامل، روی "Request a Review" کلیک کنید
  4. توضیح دهید چه مشکلی بود، چه اقداماتی انجام دادید و چطور از تکرار جلوگیری می‌کنید
  5. گوگل معمولاً ظرف چند روز تا چند هفته بررسی می‌کند — صبر داشته باشید

سرویس‌های حرفه‌ای پاک‌سازی

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

  • Sucuri: سرویس تخصصی پاک‌سازی با گارانتی برگشت هزینه اگر دوباره هک شوید
  • Wordfence Care: تیم متخصصین برای پاک‌سازی اورژانسی
  • متخصصین امنیت وردپرس محلی — در فریلنسری‌ها یا انجمن‌های تخصصی پیدا می‌شوند

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

آیا بازگردانی از بکاپ قدیمی کافی است؟

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

چرا بعد از پاک‌سازی دوباره هک شدم؟

رایج‌ترین دلیل: راه نفوذ اصلی شناسایی و بسته نشده. هکرها اغلب چند backdoor می‌گذارند تا اگر یکی پیدا شود از طریق دیگری برگردند. ممکن است یک فایل آلوده در پوشه uploads باقی مانده باشد. یا راه نفوذ اصلی (افزونه آسیب‌پذیر، رمز ضعیف) هنوز باز است. بعد از پاک‌سازی، همه افزونه‌ها و قالب‌ها را از منبع رسمی دوباره نصب کنید و مطمئن شوید همه آپدیت هستند.

آیا باید به کاربران اطلاع دهم که هک شده‌ام؟

اگر اطلاعات حساس کاربران — رمزهای عبور، اطلاعات کارت اعتباری یا داده‌های شخصی — ممکن است به خطر افتاده باشد، اطلاع‌رسانی هم اخلاقی است هم در بسیاری از کشورها قانونی. اگر سایت فقط محتوای عمومی داشته و هک برای spam یا link farm بوده، اطلاع‌رسانی ضروری نیست اما شفافیت اعتماد می‌سازد.

چطور از هک مجدد جلوگیری کنم؟

چهار عامل اصلی برای جلوگیری از هک: ۱) همه سیستم‌ها (CMS، افزونه‌ها، PHP) را به‌روز نگه دارید. ۲) از رمزهای قوی و 2FA استفاده کنید. ۳) بکاپ روزانه با nگهداری خارج از سرور داشته باشید. ۴) یک فایروال اپلیکیشن (WAF) مثل Cloudflare یا Wordfence راه‌اندازی کنید. هیچ راه‌حل صد درصدی وجود ندارد، اما این چهار اقدام ریسک را به شدت کاهش می‌دهند.

جمع‌بندی

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

مهم‌تر از پاک‌سازی، جلوگیری از تکرار است. با آپدیت منظم، 2FA، بکاپ روزانه و فایروال می‌توانید ریسک هک شدن را به حداقل برسانید. سایتی که امنیت آن به‌روز است، هدف جذابی برای هکرهای اتوماتیک نیست — و اکثر حملات اتوماتیک هستند، نه هدفمند.