آموزش گامبهگام اسکن بدافزار وردپرس
گفتوگو دربارهٔ امنیت وردپرس معمولاً از ترس شروع میشود و در ترس میماند؛ ما ترجیح میدهیم از روتین شروع شود. اسکن، حسگر است نه سپر: خودش حمله را متوقف نمیکند، ولی کشفِ زودهنگام تفاوت میان یک فایل آلوده و یک سایت سیاهشده است. به تجربهٔ ما سایتی که اسکن ماهانه دارد، هک را در مقیاس چند فایل میبیند و سایتی که ندارد، در مقیاس کل دامنه و اعتبارش نزد گوگل.
لایهبندی این خانواده روشن است: سختسازی ورود در ایمنسازی صفحه ورود وردپرس و مقابله با فشار ماشینآلات در جلوگیری از حمله brute force باز شده است؛ آن دو جلوی ورود را میگیرند و این مقاله مسیر کشفِ هر چه که از فیلترها گذشت. نقشهٔ کامل خانواده هم در هاب امنیت و پشتیبانگیری چیده شده و مرز دقیقترش این است: آن مقالهها پیشگیریاند و اینجا کشف و پاسخ.
اسکن بدافزار وردپرس چیست و چه چیزی را میگردد؟
اسکن بدافزار وردپرس، بررسی دورهای و مقایسهای است: فایلهای هسته و افزونهها با نسخهٔ رسمی سنجیده میشوند، الگوهای شناختهشدهٔ کد مخرب جستوجو میشوند و رفتار سایت — صفحات ناشناس، ریدایرکتهای ناآگاهانه، کاربران تازهساخته — فهرست میشود. این سه را با هم نگه دارید؛ اسکنی که فقط دنبال الگو میگردد، از تغییرِ ناشناسِ یک فایل مجاز غافل میماند. وردپرس حدود ۴۳٪ از کل وبسایتهای جهان را قدرت میدهد (W3Techs، تاریخ گردآوری: آبان ۱۴۰۵) و همین محبوبیت، فهرست هدفها را برای مهاجمان از پیش مرتب کرده است.
چه چیزی معمولاً پیدا میشود؟ در تجربهٔ ما سه خانواده پرتکرارند: فایل PHP تزریقشده در پوشههای آپلود، اسکریپت تزریقشده به هدر یا پاورقی قالب، و کاربر مدیریتی ساختهشده در سکوت. هیچکدام در ابتدا سردرِ سایت علامت نمیگذارند؛ به همین دلیل «سایت کار میکند» شاهد سلامت نیست و تنها سنجهٔ قابل اتکا، اسکن منظم و مقایسه با وضعیت سالم ثبتشده است. اولین نشانهها معمولاً دیر میرسند: افت ناگهانی کلیک در سرچکنسول یا برچسب قرمز مرورگر، وقتی است که کار از دسترس خارج شده است.
سه مسیر اسکن؛ افزونه، سمت سرور و پایش بیرونی

مسیر اول، افزونهٔ اسکن نصبشده است: بررسی یکپارچگی فایلهای هسته، جستوجوی الگو و زمانبندی خودکار؛ راهاندازیاش ساده است و برای اکثر سایتهای کسبوکاری کافی. مرزش را هم بدانید: افزونه درون خود وردپرس اجرا میشود و اگر مهاجم دسترسی مدیریتی گرفته باشد، اول همین افزونه را کور میکند؛ گزارش «هیچچیز سالم است» را بیچونوچرا نپذیرید و آن را با یک بازبینی سروری دورهای جفت کنید.
مسیر دوم، اسکن سمت سرور است: اجرای جستوجوی الگو و مقایسهٔ یکپارچگی از بیرونِ وردپرس، با دسترسی SSH یا پنل هاست. این مسیر در برابر دستکاریِ افزونه مقاومتر است و فایلهایی را میبیند که از درون پنل پنهان ماندهاند؛ به تجربهٔ ما برای سایتهایی که یک بار هک شدهاند اجباری است، چون بقایای هک قبلی معمولاً پوشهبهپوشه پنهان میمانند.
مسیر سوم، پایش بیرونی است: رصد برچسبهای امنیتی مرورگر، آدرسهای سیاه فیلترینگ و تغییرات صفحات از دید بیرون. این مسیر صبر میآموزد ولی تکبودنش خطر دارد؛ ترکیب پیشنهادی ما افزونهٔ زمانبندیشده برای روزمرگی و اسکن سروری فصلی یا پس از هر رخداد مشکوک است. مقایسهٔ کلاسهای ابزار امنیتی را هم قبلاً در بهترین افزونه امنیتی وردپرس باز کردهایم؛ آن مقاله ابزارها را میسنجد و اینجا چیدمانشان در تقویم را.
پیش از اسکن؛ پشتیبان، نسخهٔ پاک و خط پایهٔ فایلها
قبل از هر اسکنی، پشتیبان تازه بگیرید؛ نه به این دلیل که اسکن خطرناک است، بلکه به این دلیل که پاسخ به یافتن، با برگشتن به نسخهٔ سالم آسانتر از پاکسازی دستی است. پشتیبان باید فایل و دیتابیس را همزمان بگیرد و بیرونِ همان سرور نگه داشته شود؛ پشتیبانی که کنار سایت آلوده نشسته، در روز بحران به کار نمیآید. تاریخ پشتیبان را هم روی همان برگهٔ تقویم بنویسید تا پشتیبانِ «بهظاهر تازه» ولی مربوط به ماه قبل، شما را در روز پاسخ گول نزند.
دوم، خط پایه بسازید: فهرست فایلهای هسته و افزونهها را با نسخهٔ رسمی مقایسه و بهعنوان وضعیت سالم ثبت کنید. از این به بعد اسکن یعنی «تغییر از خط پایه» و هر تغییر ناشناس، زودتر از الگوهای مخرب دیده میشود. سوم، فهرست افزونهها را کوتاه کنید؛ هر افزونهٔ بلااستفاده یک سطح ورودی اضافه است و حذفش، هم اسکن را سریعتر میکند و هم ریسک را واقعاً کمتر. این کوتاهکردن را هر فصل تکرار کنید، چون سبد افزونهها با تغییر تیمها رشد میکند.
خواندن خروجی اسکن؛ هشدار واقعی و هشدار کاذب
خروجی اسکن، فهرستی از هشدارهاست و مهارت در رتبهبندی است، نه در وحشت. سه پرسش برای هر هشدار: فایل متعلق به کدام افزونه یا قالب است، آیا نسخهٔ رسمی همان فایل با آن فرق دارد و آیا تاریخ تغییر با کاری که شما کردهاید همخوان است؟ هشداری که هر سه پرسش شفاف پاسخ بخورد، اولویت رسیدگی میگیرد و بقیه در صف بررسی میمانند. این رتبهبندی را همان هفته انجام دهید؛ فهرست هشدارِ خوابمانده فقط اضطراب تولید میکند.
هشدار کاذب هم واقعی است: فایلهای بهینهشده، افزونههای تجاریِ رمزگذاریشده و نامهای پنهان معمولاً با الگو اشتباه گرفته میشوند. قاعدهٔ ما این است که هشدار را «بررسینشده» نگه ندارید؛ یا با مقایسهٔ نسخهٔ رسمی ببندید و برچسب بزنید، یا به صف رسیدگی ببرید. همنشینی علائم دیگر را هم درست بخوانید: صفحهٔ سفید یا خطای اتصال دیتابیس وردپرس لزوماً هک نیست و علت فنی خودش را دارد؛ آن مقاله تشخیصتفکیک را باز کرده تا مشکل فنی را با رخداد امنیتی یکی نکنید و مسیر اشتباهی نروید.
اگر بدافزار پیدا شد؛ پنج قدم پاسخ

قدم اول، انزواست: سایت را از دسترس بیرون بگیرید یا حداقل صفحهٔ تعمیر بگذارید تا بازدیدکننده به کد آلوده نخورد و آلودگی پخش نشود. قدم دوم، شناسایی مسیر ورود است: تاریخ تغییر فایلها را بخوانید و به رخدادهای همان روز نگاه کنید — افزونهٔ تازه، رمز درزکرده، همسایگی هاست. بدون این قدم پاکسازی بیفایده است، چون در باز میماند و مهاجم برمیگردد.
قدم سوم، پاکسازی از نسخهٔ سالم است: فایلهای هسته و افزونهها را از منبع رسمی بازنویسی کنید و فقط فایلهای خودتان — رسانهها و تنظیمات — را نگه دارید. قدم چهارم، چرخش کلیدهاست: همهٔ رمزهای مدیریتی، کلیدهای API و نمکهای امنیتی عوض شوند، چون مهاجم آنها را کپی کرده است. قدم پنجم، بازاسکن و ثبت مکتوب است: چه پیدا شد، از کجا وارد شد و چه چیزهایی عوض شد؛ همین سند، خط پایهٔ تازهٔ شما برای اسکنهای بعدی است.
اگر آلودگی عمیقتر از این بود — کاربرهای تکرارساز، فایلهایی که برنمیگردند، ورود مجدد پس از پاکسازی — مرحلهٔ بعد بازیابی کامل است و مسیرش را در بازیابی سایت هکشده باز کردهایم؛ آن مقاله از نقطهٔ «پاکسازی کافی نیست» شروع میکند و اینجا میایستد. این مرز را زود بشناسید، چون وسطراه بدترین حالت است: نه سایت سالم میشود و نه وقت تیم آزاد.
پیشگیری؛ ریتم ماهانه و بستن درهای ورود
پیشگیری، اسکن را کوچکتر و آرامتر میکند. سه لایهٔ اصلی را ببندید: ورود — رمز قوی، محدودسازی تلاش ناموفق و بهروزرسانی مسیر ورود طبق ایمنسازی صفحه ورود وردپرس؛ فشار ماشینآلات — بستن پیمایش خودکار طبق جلوگیری از حمله brute force؛ و سطحها — حذف افزونههای مرده، بهروزرسانی منظم و جداکردن دسترسی اعضای تیم. هر لایه، نرخ هشدارِ اسکن بعدی را واقعاً پایین میآورد و این پایینآمدن را در گزارشها میبینید؛ اگر فهرست هشدارها ماهبهماه کوتاهتر شد، یعنی لایهها دارند کار میکنند.
ریتم پیشنهادی ما ساده است: اسکن خودکار هفتگی با افزونه، اسکن سروری ماهانه یا فصلی بر اساس حجم تغییرات، بازبینی کاربران و افزونهها در همان جلسه، و پشتیبان خودکار روزانه با نگهداشت حداقل سی روز. این تقویم را یکصفحهای روی پروژه بچسبانید؛ امنیتی که به حافظه سپرده شود، با اولین عجلهٔ انتشار محتوا فراموش میشود. مالک تقویم را هم نام ببرید، حتی اگر همان مدیر سایت باشد؛ تقویم بیصاحب، با اولین فصل شلوغ تعطیل میشود.
جمعبندی؛ تقویم امنیتی یکصفحهای
جمعبندی مسیر: اسکن بدافزار وردپرس سه مسیر دارد — افزونهٔ زمانبندیشده، اسکن سمت سرور و پایش بیرونی — و پاسخ به یافتن، پنج قدم است: انزوا، شناسایی مسیر ورود، پاکسازی از نسخهٔ سالم، چرخش کلیدها و بازاسکن مکتوب. پیشگیری هم سه لایهٔ ورود، فشار و سطحها را میبندد تا اسکنهای بعدی آرامتر شوند و هشدارها قابل مدیریت بمانند. این تقویم را از همین امروز بنویسید، نه از روزی که برچسب قرمز مرورگر رسید؛ اولین هشدارِ بیرونی یعنی حلقهٔ کشف شما با تأخیر کار کرده است. به تجربهٔ ما یک صفحهٔ تقویم امنیتی از هر ابزار تازهای مؤثرتر است، چون اجرا را از تصمیم جدا میکند.
نقطهٔ شروع، دیدنِ وضعیت فعلی است: ممیزی رایگان دامنه سیگنالهای بیرونی و وضعیت فنی دامنه را نشان میدهد و برای چیدن همین روتین روی زیرساخت خودتان، صفحهٔ امنیت سوئیت معماری پایش و انتشار را باز میگوید. اگر پشتیبانگیری هم حلقهٔ ضعیف زنجیرهتان است، هاب امنیت و پشتیبانگیری نقشهٔ کامل همین خانواده را یکجا دارد.
رصد ما، رشد شما.
سؤالات پرتکرار
هر چند وقت یکبار اسکن بدافزار وردپرس لازم است؟
اسکن خودکار افزونه هفتگی و اسکن سمت سرور ماهانه یا فصلی، متناسب با حجم تغییرات سایت؛ بعد از هر رخداد مشکوک یا آلودگی قبلی، فاصلهها را کوتاهتر کنید.
اسکن با افزونه کافی است یا اسکن سروری هم لازم است؟
برای سایتهای معمولی، افزونهٔ زمانبندیشده پایهٔ خوبی است؛ اگر یک بار هک شدهاید یا افزونههای تجاری دارید، اسکن سمت سرور را هم فصلی اضافه کنید، چون بقایای هک معمولاً از چشم افزونه پنهان میماند.
افزونهٔ اسکن هشدار کاذب میدهد؛ حذفش کنم؟
نه؛ هشدار کاذب را با مقایسهٔ فایل با نسخهٔ رسمی همان افزونه ببندید و برچسب بزنید. حذف اسکن بهخاطر چند هشدار کاذب، اشتباهگرفتن حسگر بهجای سپر است.
بعد از یافتن بدافزار اولین کار چیست؟
انزوا؛ سایت را از دسترس بگیرید یا صفحهٔ تعمیر بگذارید و بعد مسیر ورود را شناسایی کنید. پاکسازی بدون بستن درِ ورود، آلودگی را فقط برای بازگشت بعدی مرتب میکند.