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

اگه سایت وردپرسی ات از روی موبایل می ره روی صفحه شرط بندی، هاستت هشدار یا تعلیق داده، یا تو گوگل عنوان های عجیب می بینی، احتمالاً هک شده. مسیر درست پاکسازی بدافزار وردپرس اینه: اول سایت رو از دسترس خارج کن و یه کپی از وضعیت آلوده بردار. بعد رمزها رو از یه دستگاه سالم عوض کن، فایل ها و دیتابیس رو بررسی و تمیز کن و آخرش با یه نسخه سالم، یا هسته و افزونه های نو، سایت رو برگردون. فقط پاک کردن علامت ظاهری کافی نیست. تا راه ورود مهاجم بسته نشه، چند روز بعد دوباره برمی گرده.
فرض کن یه فروشگاه آنلاین کوچیک داری که بیشتر فروشش شب ها و آخر هفته ست. صبح زود یه مشتری پیام می ده که لینک اینستاگرامت می ره روی یه سایت قمار. اولین غریزه اینه که سایت رو بالا نگه داری تا فروش نپره. ولی هر ساعتی که سایت آلوده باز بمونه، هزینه اش بیشتر می شه. گوگل ممکنه برچسب خطر بزنه، هاست ممکنه حساب رو تعلیق کنه، و اعتمادی که از دست بره سخت برمی گرده. یه توقف کنترل شده تقریباً همیشه ارزون تر از آلودگی ادامه دار تموم می شه.
مطمئنی سایتت واقعاً هک شده؟
قبل از هر کاری مطمئن شو مشکل از هک شدنه، نه یه خطای ساده.
فقط بازدیدکننده می بینه
بعضی بدافزارهای ریدایرکت زرنگن. فقط به کسی که از گوگل وارد شده، یا فقط به کاربر موبایل، یا فقط به بازدیدکننده ای که لاگین نیست نشون داده می شن. برای همین تو که مدیری و لاگین هستی چیزی نمی بینی و فکر می کنی همه چی روبه راهه.
آزمایش ساده اش اینه: سایت رو با مرورگر ناشناس باز کن. یه بار هم از گوشی و با اینترنت سیم کارت امتحان کن، نه وای فای اداره. یه بار هم از نتیجه جستجوی گوگل روش کلیک کن. اگه یکی از این ها تو رو جای دیگه برد، دیگه شک نکن.
تو گوگل چی می بینی
عبارت site:example.ir رو (با دامنه خودت) تو گوگل جستجو کن. اگه بین نتیجه ها صفحه هایی با عنوان ژاپنی، چینی، قمار یا داروی تقلبی دیدی که تو نساختی، سایت آلوده شده. هشدار «این سایت ممکن است هک شده باشد» زیر نتیجه ها یا پیام بخش Security issues تو Search Console هم همین رو می گه.
هاست چی می گه
دنبال ایمیل یا تیکت درباره بدافزار باش. مصرف غیرعادی CPU، تعلیق حساب و شکایت از ایمیل اسپمی که از سرورت رفته هم نشونه هستن. این ها معمولاً اولین نشونه ها هستن، چون هاست اغلب زودتر از تو می فهمه.
تو پیشخوان دنبال چی باشی
سه چیز رو چک کن:
- کاربر مدیری که نمی شناسیش
- افزونه یا قالبی که نصب نکردی
- تغییر ناگهانی «نشانی وردپرس» و «نشانی سایت» تو تنظیمات عمومی
فایل هایی که تاریخ تغییرشون با کار تو جور درنمیاد هم مشکوکن، مخصوصاً وقتی نصفه شب دست خورده باشن.
کندی تنها هک نیست
اگه سایتت فقط کند شده و هیچ کدوم از نشونه های بالا رو نداری، اول سراغ علت های معمولی تر برو: تداخل افزونه، کش خراب، یه کوئری سنگین یا کمبود منابع هاست. لاگ خطا و نمودار مصرف منابع رو تو پنل هاست نگاه کن. کندی همراه با فایل ناشناس یا پرش بی دلیل CPU مشکوکه. کندی تنها معمولاً نه.
هکر از کجا اومده؟ رایج ترین راه ها
مهاجم معمولاً دنبال سایت خاصی نیست. ابزارهای خودکار هر دری که باز باشه رو امتحان می کنن. ترتیب زیر برداشت عملی از سایت های آلوده ایه که دیدیم، نه یه آمار رسمی.
- افزونه یا قالب قدیمی، یا کرک شده. رایج ترین در ورودیه. آسیب پذیری افزونه ها علنی می شه و ربات ها سایت های آپدیت نشده رو پیدا می کنن. نسخه های «nulled» که رایگان دانلود می شن هم اغلب با درپشتی (backdoor) می رسن. این صرفه جویی کوچیک می تونه به قیمت یه هفته توقف فروش تموم بشه.
- رمز ضعیف یا لو رفته. رمز وردپرس، FTP، پنل هاست یا دیتابیس. رمز تکراری که یه جای دیگه لو رفته هم همین حکم رو داره.
- هاست مشترک و سایت همسایه. وقتی چند سایت تو یه حساب هستن و یکی آلوده بشه، بقیه هم راحت آلوده می شن. اگه چند سایت رو یکجا نگه می داری، میزبانی چند سایت؛ حساب مشترک چه خطرهایی دارد؟ رو بخون.
- کامپیوتر آلوده. بدافزاری که رمزهای ذخیره شده مرورگر یا FTP رو می دزده. سایت تمیز می شه ولی دستگاهی که ازش لاگین می کنی هنوز آلوده ست.
- تنظیمات ضعیف. مجوز فایل های بیش از حد باز، ویرایشگر فایل داخل پیشخوان، هسته قدیمی، یا فایل های بکاپ و
.zipکه تو public_html جا مونده و هر کسی می تونه دانلودشون کنه.

قدم اول: دسترسی رو ببند ولی مدرک رو نگه دار
ترتیب اینجا مهمه. اگه اول بری سراغ پاک کردن فایل ها، هم مدرک از بین می ره، هم مهاجم هنوز تو سایت هست و می تونه دوباره آلوده اش کنه.
۱. سایت رو از دسترس خارج کن. با صفحه تعمیرات یا محدود کردن دسترسی با IP. هدف اینه که بازدیدکننده بدافزار نبینه و مهاجم هم نتونه کار جدیدی بکنه. اگه فروشگاه داری و درگاه پرداخت فعاله، سفارش های جاری رو یادداشت کن.
۲. یه کپی از وضعیت فعلی بردار. فایل ها و دیتابیس رو همون طور که هستن دانلود کن و جدا نگه دار. بعداً لازمت می شه تا ببینی مهاجم از کجا اومده، یا اگه پاکسازی خراب شد برگردی. این کپی رو دوباره روی سایت نذار.
۳. رمزها رو از یه دستگاه سالم عوض کن. نه از همون لپ تاپی که بهش شک داری. رمز وردپرس (همه مدیرها)، پنل هاست، FTP یا SFTP، SSH، دیتابیس و ایمیل مدیر رو عوض کن. رمز دیتابیس رو بعدش تو wp-config.php هم به روز کن. کلیدهای امنیتی (salts) رو هم عوض کن تا نشست های باز قبلی بی اعتبار بشن.
۴. به هاست خبر بده. اگه هاست هشدار داده، جوابش رو بده و بگو داری سایت رو تمیز می کنی. لاگ های سرور (access log و error log) می تونن نشون بدن مهاجم از کدوم فایل اومده.
یه نکته برای سایت هایی که درگاه پرداخت دارن: اگه همزمان محدودیت ورود یا فایروال سفت تری می ذاری، مسیر بازگشت از بانک رو جدا در نظر بگیر. ما تو پروژه های دارای درگاه، این مسیر رو از قوانین فایروال و محدودیت های ورود جدا نگه می داریم تا بازگشت کاربر از بانک هیچ وقت مسدود نشه و پرداخت نیمه کاره نمونه. بعد از هر تغییر یه خرید آزمایشی با مبلغ کم بکن.
پاکسازی بدافزار وردپرس؛ مرحله به مرحله
دو راه اصلی داری: برگشتن به یه بکاپ تمیز، یا پاک کردن دستی. هر کدوم جای خودشو داره.
| بازیابی از بکاپ تمیز | پاکسازی دستی | |
|---|---|---|
| سرعت | سریع، اگه بکاپ سالم داشته باشی | کندتر، وقت و دقت می خواد |
| ریسک | اگه بکاپ از بعد آلودگی باشه، بدافزار هم برمی گرده | اگه یه درپشتی جا بمونه، دوباره هک می شی |
| مناسب برای | سایتی که بکاپ منظم و تاریخ دار داره | سایتی که بکاپ نداره یا بکاپش بعد از آلودگی گرفته شده |
| نکته مهم | بعدش حتماً همه چیز رو آپدیت کن و رمزها رو عوض کن | هسته، افزونه ها، دیتابیس و کاربرها، هر چهارتا رو باید بررسی کنی |
اگه بکاپ داری، تاریخش رو با اولین نشونه آلودگی مقایسه کن و نسخه قبل از اون رو انتخاب کن. نحوه گرفتن و آزمایش بکاپ رو تو بکاپ سی پنل؛ آموزش تهیه و آزمایش بازیابی سایت توضیح دادیم. ولی حتی با بکاپ تمیز هم کار تموم نشده. اگه راه ورود (مثلاً همون افزونه قدیمی) بسته نشه، سایت دوباره آلوده می شه.
فایل ها رو با نسخه اصلی مقایسه کن
هسته وردپرس رو می شه با نسخه رسمی مقایسه کرد. اگه WP-CLI روی سرورت هست:
wp core verify-checksums
wp plugin verify-checksums --all
دستور اول فایل های هسته رو با نسخه اصلی می سنجه و هر فایلی که تغییر کرده یا اضافه شده رو نشون می ده. دستور دوم همین کار رو برای افزونه های مخزن رسمی می کنه. افزونه های خارج از مخزن یا کرک شده رو این روش نمی گیره و باید دستی بررسی بشن.
برای عوض کردن هسته با نسخه تمیز، بدون دست زدن به محتوای سایت:
wp core download --force --skip-content
این دستور فایل های هسته رو دوباره می ریزه ولی به پوشه wp-content و wp-config.php دست نمی زنه، پس اون دو رو خودت جدا بررسی کن. یه نکته هم هست: فایل های اضافه ای که مهاجم تو ریشه سایت یا تو wp-admin و wp-includes گذاشته با این دستور پاک نمی شن. اگه verify-checksums همچین فایلی نشون داد، دستی حذفش کن.
جاهایی که بدافزار دوست داره قایم بشه
- پوشه uploads. تو این پوشه فقط عکس و فایل رسانه ای باید باشه. هر فایل
.phpاینجا مشکوکه:
find wp-content/uploads -type f -name "*.php"
- فایل های تازه تغییر کرده. فایل های PHP که تو چند روز اخیر دست خورده ن:
find . -type f -name "*.php" -mtime -7
wp-config.phpو.htaccess. دنبال کدهای ریدایرکت ناشناس بگرد، یا خط هایی که مسیرهای عجیب لود می کنن.- پوشه mu-plugins و
functions.phpقالب. جاهای محبوبی برای کد مخفی ان، چون کدهای mu-plugins بدون فعال کردن اجرا می شن. - کدهای فشرده یا رمزشده. الگوهایی مثل
eval(base64_decode(یاgzinflate(تو فایل هایی که ربطی به این کار ندارن. البته بعضی افزونه های سالم هم از این توابع استفاده می کنن، پس فقط به وجودشون تکیه نکن و فایل رو کنار بقیه شواهد ببین. - cron job ها. بعضی بدافزارها تو cron وردپرس یا cPanel جا خوش می کنن و بعد از پاک کردن، خودشون رو دوباره می سازن.
دیتابیس هم می تونه آلوده باشه
فقط فایل ها کافی نیست. تو جدول wp_options مقدار siteurl، home و active_plugins رو نگاه کن. تو نوشته ها و ویجت ها دنبال تگ <script> یا <iframe> ناشناس بگرد. کاربرها رو هم چک کن:
wp user list --role=administrator
هر مدیری که نمی شناسیش رو حذف کن. اگه نمی دونی کی ساخته، اول از لاگ سرور یا تاریخ ثبت نام ردش رو بگیر.
افزونه ها و قالب های اضافی
افزونه ای که فعال نیست هم می تونه آسیب پذیر باشه. هر چی لازم نداری حذف کن، نه فقط غیرفعال. افزونه یا قالب کرک شده رو با نسخه اصلی از منبع رسمی عوض کن. اگه به اون هزینه نمی ارزه، یه جایگزین بهتر پیدا کن.

بعد از تمیزکاری: سایت رو امن برگردون
تمیز کردن فقط نیمه راهه.
همه چی رو آپدیت کن. هسته، افزونه ها، قالب. اگه نسخه PHP قدیمیه، با هاست هماهنگ کن. خیلی از حمله ها از آسیب پذیری های شناخته شده میان و فقط همین آپدیت ها جلوشون رو می گیره.
دوباره رمزها و کلیدهای امنیتی رو عوض کن. این بار بعد از پاکسازی. ورود دو مرحله ای رو هم برای مدیرها فعال کن.
نقش ها رو بازبینی کن. هر کس فقط به اندازه نیازش دسترسی داشته باشه. مدیری که ماهی یه بار مقاله می ذاره، نیازی به نقش Administrator نداره.
اگه درگاه پرداخت داری، یه بار کل مسیر خرید رو آزمایش کن. اگه شک داری اطلاعات اتصال به درگاه (مثل کلید یا کد پذیرنده) تو فایل های آلوده بوده، با پشتیبانی درگاه حرف بزن و بپرس چطور می شه کلید رو عوض کرد. این به سرویس دهنده و شرایط هر درگاه بستگی داره.
اگه کاربر یا مشتری داری، بسته به نوع داده ای که تو سایت نگه می داشتی، بهتره رمز کاربرها رو ریست کنی و بهشون اطلاع بدی. درباره الزام قانونی گزارش دادن، با یه مشاور حقوقی حرف بزن. قانون و رویه ها عوض می شن و ما نمی خوایم یه جواب قطعی بدیم.
هشدارها رو جمع کن
- تو Search Console و بخش Security issues، بعد از تمیز شدن سایت درخواست بازبینی بده.
- از هاست بخواه تعلیق یا هشدار رو بررسی و رفع کنه.
- اگه سرورت ایمیل اسپم فرستاده، ممکنه IP یا دامنه ات تو لیست های سیاه رفته باشه. اگه بعدش ایمیل های سایتت به دست مشتری نمی رسه، اسپم شدن ایمیل؛ مشکل از هاست است یا فرستنده؟ کمکت می کنه.
دو چیز رو هم یادت باشه. اول اینکه گاهی گوگل چند روز طول می ده تا هشدار رو برداره. پس اگه هشدار هنوز مونده، نتیجه نگیر که پاکسازی ناقص بوده و عجله نکن. دوم اینکه تا یکی دو هفته بعد، لاگ ها و فایل های جدید رو دوباره نگاه کن. اگه درپشتی جا مونده باشه، معمولاً تو همین بازه خودشو نشون می ده.
پیشگیری: کارهای ارزون که جلوی دفعه بعد رو می گیره
هیچ کدوم از این ها گرون یا پیچیده نیستن. فقط باید ادامه شون بدی.
- بکاپ منظم و خارج از سرور. بکاپی که روی همون هاست مونده، با هک شدن سرور ممکنه از بین بره. بازیابی رو هم یه بار امتحان کن.
- آپدیت برنامه ریزی شده. هفته ای یه بار، یا آپدیت خودکار برای وصله های امنیتی. قبلش یه بکاپ بگیر.
- افزونه کمتر، ریسک کمتر. هر افزونه یه سطح حمله جدیده. اگه کاری رو بدون افزونه می شه انجام داد، همون بهتره.
- هر سایت یه حساب جدا. اگه چند سایت داری، همه رو تو یه حساب نریز که یکی خراب بشه و بقیه رو هم با خودش ببره.
- ویرایشگر فایل داخل پیشخوان رو ببند. این خط رو به
wp-config.phpاضافه کن:
define('DISALLOW_FILE_EDIT', true);
- محدودیت ورود و ورود دو مرحله ای. هر جا هم که این رو سفت می کنی، مسیر بازگشت درگاه پرداخت رو فراموش نکن.
- مانیتورینگ. تغییر فایل و قطعی رو زود بفهم. اگه نمی خوای خودت هر روز سر بزنی، می تونی مانیتورینگ و پایداری رو بسپاری به کسی که این کار رو می کنه.
اگه نمی خوای خودت وارد بخش فنی بشی، یا بعد از دو بار تلاش آلودگی برگشت، مدیریت و امن سازی سرور رو به یه تیم بسپار. تو مدیریت و امن سازی سرور همین کارها (بررسی لاگ، بستن راه ورود، سخت سازی) رو انجام می دیم. حساب ساده ست: اگه یه ساعت قطعی برات هزینه واقعی داره، کمک گرفتن معمولاً از چند روز آزمون و خطا ارزون تر درمیاد.
سوالات متداول
بعد از هک شدن، فقط افزونه امنیتی نصب کنم کافیه؟
نه. افزونه امنیتی می تونه بخشی از بدافزار رو پیدا کنه یا جلوی حمله های بعدی رو بگیره، ولی جای پیدا کردن و بستن راه ورود رو نمی گیره. اول فایل ها و دیتابیس رو بررسی کن و رمزها رو عوض کن. بعد اگه خواستی، افزونه امنیتی رو به عنوان یه لایه اضافه بذار.
می تونم فقط از بکاپ برگردم و کار تموم باشه؟
فقط وقتی که بکاپ قبل از آلودگی گرفته شده باشه. بعدش هم باید همه چیز آپدیت بشه و رمزها عوض بشن، وگرنه همون دری که بار اول هک شدی هنوز بازه. اگه مطمئن نیستی بکاپ مال کیه، دستی هم یه بررسی بکن.
هک شدن روی سئو و رتبه سایت اثر می ذاره؟
ممکنه. صفحه های اسپم تو نتایج و هشدار امنیتی گوگل می تونن بازدید رو کم کنن، ولی بعد از تمیز شدن و درخواست بازبینی معمولاً وضعیت برمی گرده. زمانش رو نمی شه دقیق گفت و به شدت آلودگی و سرعت اقدامت بستگی داره.
چرا بعد از پاک کردن، دوباره ریدایرکت برگشت؟
معمولاً یا یه درپشتی جا مونده، یا افزونه آسیب پذیر هنوز نصبه، یا رمز لو رفته رو عوض نکردی. دنبال فایل های PHP تو پوشه uploads، کاربر مدیر ناشناس و cron job بگرد. اگه چیزی پیدا نکردی، وقتشه از یه متخصص کمک بگیری.
اگه هاست حسابم رو تعلیق کرده، چی کار کنم؟
اول با پشتیبانی هاست تماس بگیر و بپرس دلیل تعلیق چیه و کدوم فایل ها مشکوکن. بعد طبق همین مقاله سایت رو تمیز کن و به هاست خبر بده تا دوباره بررسی کنه. اگه سایت رو بدون اطلاع فعال کنی و هنوز آلوده باشه، ممکنه این بار سخت گیرانه تر برخورد کنن.
اگه فقط سه چیز یادت بمونه
اول، قبل از اینکه چیزی پاک کنی، سایت رو ببند و یه کپی از وضعیت آلوده بردار. دوم، رمزها رو از یه دستگاه سالم عوض کن و راه ورود مهاجم رو پیدا کن، چون بدون این، هر پاکسازی موقتیه. سوم، بعد از برگشت سایت، آپدیت، بکاپ آزمایش شده و یه نگاه دوباره به لاگ ها تو یکی دو هفته بعد رو جدی بگیر. اگه این سه تا رو انجام بدی، احتمال تکرار هک های معمولی خیلی کمتر می شه.


