یکی از مشتریها پیام داده که سایتتان او را به یک سایت شرطبندی برده است. یا کروم صفحهٔ قرمز هشدار نشان میدهد، یا هاستینگ خبر داده حسابتان بهدلیل ارسال اسپم معلق شده. واکنش طبیعی ترس است و بعد کارهای عجولانه: پاککردن پوشهها، نصب دوبارهٔ قالب، یا سپردن سایت به هر کسی که «یک نگاه بیندازد».
این راهنما برای همین لحظه است. قدمها را به همین ترتیب جلو بروید: مطمئن شوید واقعاً هک شده، جلوی گسترش آسیب را بگیرید، ریشه را پیدا و پاکسازی کنید و در آخر اعتماد گوگل را برگردانید. مثالها بیشتر دربارهٔ سایت وردپرسی هک شده است، چون در ایران رایجترین حالت همین است؛ ولی منطق کار برای هر سایتی یکسان است.
چطور بفهمم سایتم واقعاً هک شده است؟
بیشتر هکها بیصدا هستند. سایت شما برای هکر ابزار درآمد است: ترافیکتان را به جای دیگری میفرستد، صفحهٔ اسپم در گوگل میسازد یا از سرورتان ایمیل انبوه میفرستد. به همین دلیل گاهی صاحب سایت آخرین نفری است که میفهمد.
ریدایرکت سایت به سایت دیگر، فقط برای بعضیها
رایجترین نشانه، فرستادن بازدیدکننده به سایت شرطبندی، کازینو یا تبلیغات مشکوک است. نکتهٔ گیجکننده این است که کد مخرب اغلب فقط برای گروه خاصی فعال میشود: کاربران موبایل، کسانی که از نتایج گوگل آمدهاند یا بازدید اول هر کاربر. شما که بهعنوان مدیر وارد شدهاید و آدرس را مستقیم میزنید، چیزی نمیبینید. برای آزمودن، با گوشی و اینترنت همراه، در حالت ناشناس مرورگر، نام سایت را در گوگل جستوجو کنید و از نتیجه وارد شوید.
صفحههای اسپم ژاپنی یا دارویی در گوگل
عبارت site:yourdomain.com را در گوگل جستوجو کنید (با دامنهٔ خودتان). اگر صفحههایی با عنوان ژاپنی، چینی، فروش دارو یا کالای تقلبی میبینید که شما نساختهاید، سایت به «اسپم کلیدواژه» آلوده است. گاهی این صفحهها فقط وقتی ربات گوگل سر میزند ساخته میشوند.
نشانههای دیگر
کاربر مدیر ناشناس در پیشخوان، هشدار «Deceptive site ahead» در مرورگر، پیام در بخش «Security issues» سرچ کنسول، تعلیق حساب از طرف هاست، برگشتخوردن ایمیلهای شما و فایل .php در پوشهٔ آپلود، همه از نشانههای رایجاند.
جدول نشانهها و اولین اقدام
این جدول برای تشخیص سریع است، نه حکم قطعی؛ ولی جدیگرفتن هر نشانه ضرری ندارد.
| نشانه | معنای احتمالی | اولین اقدام |
|---|---|---|
| ریدایرکت به سایت شرطبندی فقط روی موبایل یا از گوگل | کد مخرب در قالب، .htaccess یا پایگاه داده |
از وضعیت فعلی نسخهٔ کامل بگیرید، بعد حالت تعمیر را فعال کنید |
صفحههای ژاپنی یا دارویی در نتیجهٔ site: |
اسپم کلیدواژه؛ صفحههای جعلی یا تولید پویا | فهرست آدرسهای اسپم را ذخیره کنید و سرچ کنسول را ببینید |
| کاربر مدیر ناشناس | دسترسی کامل هکر به پیشخوان | تاریخ ساخت و ایمیلش را یادداشت کنید، بعد غیرفعالش کنید |
| هشدار قرمز مرورگر یا Security issues | گوگل بدافزار یا فیشینگ تشخیص داده | نمونهآدرسهای گزارش سرچ کنسول را بررسی کنید |
| تعلیق حساب از طرف هاست | فایل مخرب یا ارسال اسپم از حساب شما | گزارش دقیق فایلها و لاگها را از هاست بخواهید |
| ارسال ناگهانی ایمیل اسپم | اسکریپت ارسال ایمیل یا رمز لورفتهٔ ایمیل | رمز همهٔ صندوقها را عوض کنید |
فایل .php در پوشهٔ آپلود |
تقریباً همیشه درِ پشتی (Backdoor) | برای بررسی نگهش دارید و در پاکسازی حذفش کنید |
ساعت اول: چه کنیم و چه نکنیم
در ساعت اول هدف تمیزکردن نیست؛ هدف این است که آسیب بیشتر نشود و شواهد از بین نرود.
- با عجله چیزی را پاک نکنید. حذف فایلهای مشکوک یا نصب دوبارهٔ وردپرس شاید نشانه را چند ساعت از بین ببرد، ولی راه نفوذ را نمیبندد و ردپای هکر را هم پاک میکند. تقریباً همیشه چند درِ پشتی دیگر هم هست.
- از وضعیت فعلی نسخهٔ کامل بگیرید. از همهٔ فایلها و پایگاه داده، در همین وضعیت آلوده، نسخه بگیرید و بیرون از سرور نگه دارید. این نسخه مدرک است، نه بکآپ برای بازگرداندن؛ با آن میشود فایلهای تغییرکرده را پیدا کرد و سفارشها یا نوشتههای اخیر را نجات داد. لاگهای دسترسی سرور را هم دانلود کنید، چون بعضی هاستها فقط چند روز نگهشان میدارند.
- همهٔ رمزها را عوض کنید: حساب هاستینگ و کنترل پنل (cPanel یا هر پنل دیگر)، همهٔ حسابهای FTP، کاربر پایگاه داده (و بهروزکردنش در
wp-config.php)، همهٔ مدیران سایت، صندوقهای ایمیل دامنه و پنل ثبت دامنه. این کار را از دستگاهی انجام دهید که به آلودگیاش شک ندارید. در وردپرس کلیدهای امنیتی (Salt) را هم عوض کنید تا نشستهای باز، از جمله نشست هکر، بسته شوند. - سایت را در حالت تعمیر بگذارید. افزونهٔ حالت تعمیرِ داخل همان وردپرس آلوده همیشه کافی نیست، چون کد مخرب ممکن است زودتر اجرا شود. مطمئنتر این است که از طریق هاست یا
.htaccessدرخواستها را به یک صفحهٔ ایستا با پاسخ ۵۰۳ بفرستید تا گوگل بفهمد قطعی موقت است. - به هاستینگ خبر دهید. بپرسید چه فایلهایی را مخرب شناختهاند، از چه تاریخی بکآپ دارند و آیا سایتهای دیگر همان حساب هم آلودهاند. اگر حسابتان معلق شده، این تنها راه برگشت است.
پیدا کردن راه نفوذ: مهمترین قدم
پاکسازی بدون پیدا کردن راه ورود، مثل تمیزکردن خانه با در باز است. رایجترین راهها اینهاست:
- افزونه و قالب قدیمی. بیشتر هکهای وردپرس از افزونه یا قالبی با آسیبپذیری شناختهشده شروع میشوند. رباتها هزاران سایت را خودکار برای همان نسخه میگردند.
- قالب و افزونهٔ نالشده. در ایران بسیار رایج است. نسخهای که از سایت «دانلود رایگان» یا با «لایسنس فعالشده» گرفته شده، گاهی از روز اول درِ پشتی دارد و بهروزرسانی رسمی هم نمیگیرد. تا این نسخه روی سایت است، پاکسازی عملاً بیفایده است.
- رمز ضعیف یا تکراری. رباتها صفحهٔ ورود وردپرس را بیوقفه با رمزهای رایج و رمزهای لورفته از سایتهای دیگر امتحان میکنند.
- سایتهای دیگر روی همان حساب هاست. یک نسخهٔ آزمایشی قدیمی یا سایت فراموششده روی همان هاست اشتراکی، آلودگی را به سایت اصلی برمیگرداند؛ این دلیل رایج هکهای تکراری است.
- دسترسیهای قدیمی. حساب مدیرِ طراح قبلی یا FTP یک فریلنسر که هیچوقت بسته نشده.
برای حدسزدن زمان و مسیر نفوذ، تاریخ تغییر فایلها، تاریخ ساخت کاربران ناشناس و لاگهای دسترسی را کنار هم بگذارید. درخواستهای مکرر به یک افزونهٔ خاص، درست پیش از اولین فایل مخرب، سرنخ خوبی است.
پاکسازی بدافزار سایت، قدمبهقدم
بازگرداندن از بکآپ تمیز، اگر دارید
بهترین حالت، نسخهای است که مطمئنید پیش از نفوذ گرفته شده. بکآپ دیروز احتمالاً همان آلودگی را دارد، چون بسیاری از نفوذها هفتهها پیش از دیدهشدن نشانهها رخ دادهاند. بعد از بازگرداندن هم باید راه نفوذ را ببندید و همهچیز را بهروز کنید. سفارشها یا محتوای ثبتشده پس از تاریخ بکآپ را با احتیاط و دستی از نسخهٔ مدرک منتقل کنید.
مقایسه با فایلهای اصلی
اگر بکآپ تمیز ندارید:
- پوشههای
wp-adminوwp-includesو فایلهای ریشه را با نسخهٔ رسمی وردپرس، همنسخه با سایت خودتان، جایگزین کنید. - هر افزونه و قالب را از منبع رسمی دوباره نصب کنید، نه از نسخهٔ روی سرور. نسخهٔ نالشده را حذف یا با نسخهٔ قانونی جایگزین کنید.
- در
wp-content/uploadsنباید هیچ فایل.phpباشد. wp-config.phpو همهٔ فایلهای.htaccessرا خطبهخط بخوانید؛ کد ریدایرکت مخرب خیلی وقتها همینجاست.
درهای پشتی و پایگاه داده
درِ پشتی فایل یا قطعهکدی است که حتی پس از تغییر رمزها راه ورود را باز نگه میدارد. کدهای رمزگذاریشده، رشتههای طولانی بیمعنی و توابعی مثل eval و base64_decode در جای غیرمنتظره نشانهٔ آناند؛ هرچند افزونههای سالم هم گاهی از این توابع استفاده میکنند و همین است که پاکسازی دستی تجربه میخواهد. در پایگاه داده هم دنبال اسکریپت تزریقی در نوشتهها و تنظیمات، کاربران ناشناس و کارهای زمانبندیشده (Cron) بگردید که بدافزار را دوباره نصب میکنند.
بهروزرسانی و آزمون دوباره
هسته، افزونهها، قالب و نسخهٔ PHP را به آخرین نسخهٔ پایدار برسانید و افزونههای بلااستفاده را پاک کنید، نه فقط غیرفعال. بعد همان آزمون اول را تکرار کنید: با گوشی، از نتایج گوگل، در حالت ناشناس.
اگر بکآپ تمیز ندارید: صادقانه بگوییم
اگر هیچ بکآپ تمیزی وجود ندارد، هیچکس نمیتواند با اطمینان کامل بگوید سایت کاملاً پاک شده است. پاکسازی دستی نشانههای شناختهشده را برطرف میکند، ولی همیشه احتمال دارد یک درِ پشتی خوب پنهانشده جا بماند و هفتهها بعد فعال شود. هر کسی که بدون بکآپ تمیز «پاکسازی تضمینی» وعده میدهد، بیش از آنچه میداند قول داده است.
گاهی بازسازی منطقیتر از پاکسازی است: وقتی سایت روی قالب نالشده با کد سفارشی زیاد ساخته شده، چند بار پشتسرهم هک شده، نرمافزارهایش آنقدر قدیمیاند که بهروزرسانی عملاً بازنویسی است، یا طراحیاش در هر حال نیاز به بازنگری داشته. در این حالت محتوا، تصاویر و اطلاعات محصولات پس از بررسی به سایت تازه منتقل میشوند و کد قدیمی کنار میرود. راهنمای بازطراحی سایت و مقایسهٔ وردپرس یا کدنویسی اختصاصی به این تصمیم کمک میکنند. هزینهٔ بازسازی به دامنهٔ کار بستگی دارد؛ برای تخمین اولیه از محاسبهگر هزینه استفاده کنید.
بازگرداندن اعتماد گوگل
درخواست بررسی در سرچ کنسول
اگر در گزارش Security issues سرچ کنسول هشداری ثبت شده، پس از برطرفشدن همهٔ مشکلات در همهٔ صفحهها گزینهٔ Request Review را بزنید. کوتاه بنویسید مشکل چه بود، چه کردید (راه نفوذ، فایلهای حذفشده، بهروزرسانیها) و نتیجه چه شد. طبق راهنمای گوگل، بررسی ممکن است چند روز تا چند هفته طول بکشد. درخواست زودهنگام وقتی سایت هنوز آلوده است، فقط کار را عقب میاندازد.
برخورد با آدرسهای اسپم در نتایج
- مطمئن شوید آدرسهای اسپم حالا کد ۴۰۴ یا بهتر از آن ۴۱۰ برمیگردانند. ۴۱۰ صریحتر میگوید صفحه برای همیشه حذف شده است.
- آنها را به صفحهٔ اصلی ریدایرکت نکنید؛ این کار اسپم را به صفحههای سالم گره میزند.
- برای صفحهای که فوری باید از نتایج برود، ابزار Removals سرچ کنسول آن را موقتاً پنهان میکند؛ این جای ۴۰۴ یا ۴۱۰ را نمیگیرد.
- نقشهٔ سایت جعلی و مالکان ناشناس را از سرچ کنسول حذف کنید.
چند روز بعد، دوباره بررسی کنید
تا چند هفته هر چند روز یک بار site: را بزنید، از موبایل و از نتایج گوگل وارد سایت شوید و فهرست کاربران مدیر و فایلهای تازه را ببینید. برگشت نشانهها یعنی چیزی جا مانده است. جزئیات فنی بیشتر در راهنمای گوگل برای سایتهای هکشده آمده و برای بررسی سئوی سایت پس از بحران، چکلیست سئو نقطهٔ شروع خوبی است.
پیشگیری: کاری کنید که تکرار نشود
سایتی که علت هکش برطرف نشود، معمولاً دوباره هک میشود. این عادتها احتمال نفوذ را جدی کم میکنند، هرچند هیچکدام امنیت مطلق نمیسازند:
- بهروزرسانی منظم هسته، افزونهها، قالب و PHP.
- حذف افزونهها و قالبهای بلااستفاده؛ افزونهٔ غیرفعال هم روی سرور است.
- هرگز قالب یا افزونهٔ نالشده؛ لایسنس قانونی تقریباً همیشه از یک پاکسازی ارزانتر است.
- ورود دومرحلهای (2FA) برای مدیران سایت، پنل هاست و ایمیل.
- حداقل دسترسی: هر کس فقط نقشی که لازم دارد؛ دسترسی همکاران قبلی را بلافاصله ببندید.
- بکآپ بیرون از سرور با چند نسخهٔ قدیمیتر، و آزمایش بازگردانی هر چند وقت یک بار. بکآپی که هرگز بازگردانی نشده، فقط امید است.
- فایروال برنامهٔ وب (WAF) در سطح هاست، CDN یا افزونهٔ امنیتی معتبر.
- پایش: اسکن دورهای فایلها، اعلانهای ایمیلی سرچ کنسول و نگاه منظم به فهرست کاربران.
- جداکردن سایتها: نسخهٔ آزمایشی و پروژههای قدیمی را کنار سایت اصلی نگه ندارید.
کارهای دورهای را با جزئیات در چکلیست نگهداری وردپرس آوردهایم و انتخاب هاست مناسب را در راهنمای دامنه و هاست.
چه وقت کار را به متخصص بسپارید؟
اگر سایتتان ساده است، بکآپ تمیز دارید و با فایلها و پایگاه داده راحتید، بیشتر این قدمها را خودتان میتوانید انجام دهید. ولی وقتی سایت فروشگاهی است و اطلاعات مشتریان در خطر است، بکآپ تمیز ندارید، سایت پس از پاکسازی دوباره آلوده شده یا گوگل هشدار ثبت کرده و ترافیک افت کرده، کمک گرفتن منطقیتر است.
هنگام انتخاب، بپرسید راه نفوذ را چطور پیدا میکند، آیا از وضعیت فعلی نسخهٔ مدرک نگه میدارد و پس از کار چه گزارشی میدهد. به کسی که بدون دیدن سایت «تضمین» میدهد، با احتیاط نگاه کنید.
جمعبندی
در سایت هکشده ترتیب کار از سرعت مهمتر است: نشانه را تأیید کنید، نسخهٔ مدرک بگیرید، همهٔ رمزها را عوض کنید و سایت را در حالت تعمیر بگذارید. بعد راه نفوذ را پیدا کنید، با بکآپ تمیز یا مقایسه با فایلهای اصلی پاکسازی کنید و همهچیز را بهروز کنید. در آخر از گوگل درخواست بررسی کنید و چند هفته مراقب باشید.
قدم بعدی عملی: همین امروز ببینید آخرین بکآپ بیرون از سرورتان کی گرفته شده و آیا بازگردانیاش را آزمودهاید. اگر میخواهید پاکسازی، بهروزرسانی و پایش منظم سایت را کسی با شرح کار مکتوب برعهده بگیرد، خدمات نگهداری و پشتیبانی سایت را ببینید. در مای طرح، پشتیبانی با یک بررسی اولیهٔ فنی و امنیتی شروع میشود و بازیابی سایت هکشده برای مشترکان پکیجهای حرفهای و جامع رایگان است.
سؤالات متداول
سایت هک شده چه کنم؛ اول از همه چه کاری انجام دهم؟
پیش از هر پاکسازی، از همهٔ فایلها و پایگاه داده در همان وضعیت آلوده نسخهٔ کامل بگیرید و جدا نگه دارید. بعد رمز هاست، کنترل پنل، FTP، پایگاه داده، مدیران سایت و ایمیلها را از یک دستگاه سالم عوض کنید، سایت را در حالت تعمیر بگذارید و به هاست خبر دهید. پاککردن عجولانهٔ فایلها شواهد را از بین میبرد و راه نفوذ را نمیبندد.
چرا سایتم فقط روی موبایل به سایت شرطبندی ریدایرکت میشود؟
بسیاری از کدهای مخرب عمداً فقط برای گروه خاصی فعال میشوند: کاربران موبایل، کسانی که از نتایج گوگل میآیند یا بازدید اول هر کاربر. مدیری که وارد پیشخوان شده یا آدرس را مستقیم میزند، چیزی نمیبیند. این نشانهٔ آلودگی واقعی است، نه خطای گوشی؛ کد معمولاً در .htaccess، فایلهای قالب یا پایگاه داده پنهان شده است.
هشدار Deceptive site گوگل چقدر طول میکشد تا برداشته شود؟
پس از پاکسازی کامل، باید در گزارش Security issues سرچ کنسول درخواست بررسی بفرستید. به گفتهٔ خود گوگل، بررسی ممکن است از چند روز تا چند هفته طول بکشد. اگر سایت هنوز آلوده باشد، درخواست رد میشود و زمان بیشتری از دست میرود؛ پس پیش از درخواست، صفحهها را دوباره از موبایل و از نتایج گوگل امتحان کنید.
آیا افزونهٔ امنیتی بهتنهایی سایت را پاک میکند؟
افزونههای اسکن برای پیدا کردن بدافزارهای شناختهشده مفیدند، ولی جای بررسی دستی را نمیگیرند. بدافزارهای تازه یا خوب پنهانشده را همیشه نمیشناسند و راه نفوذ را هم خودشان نمیبندند. روی سایت آلوده، کد مخرب ممکن است پیش از خود افزونه اجرا شود. بهتر است از آن بهعنوان ابزار کمکی و برای پایش پس از پاکسازی استفاده کنید.
با صفحههای اسپم ژاپنی که در گوگل ایندکس شدهاند چه کنم؟
اول مطمئن شوید آن صفحهها روی سرور حذف شدهاند و کد ۴۰۴ یا ۴۱۰ برمیگردانند، نه ریدایرکت به صفحهٔ اصلی. نقشهٔ سایت جعلی و مالکان ناشناس سرچ کنسول را هم حذف کنید. گوگل با خزش دوباره، این آدرسها را بهتدریج از نتایج کنار میگذارد. برای موارد فوری، ابزار Removals سرچ کنسول آنها را موقتاً پنهان میکند.
پاکسازی بهتر است یا ساختن دوبارهٔ سایت؟
اگر بکآپ تمیز دارید و راه نفوذ مشخص است، پاکسازی معمولاً کافی است. اما اگر سایت روی قالب نالشده ساخته شده، چند بار پشتسرهم هک شده یا نرمافزارهایش بسیار قدیمیاند، ساختن دوباره و انتقال محتوای بررسیشده گاهی هم مطمئنتر است و هم در درازمدت ارزانتر. بدون بکآپ تمیز، هیچ پاکسازیای را نمیتوان کاملاً تضمین کرد.