91035059 - 021

مشاوره رایگان قبل از همکاری

شناسایی و حذف بک‌دور در وردپرس

شناسایی و حذف بک‌دور در وردپرس؛ راهنمای کاملاً عملی و قابل‌فهم

آنـچه در این مقاله میـخوانیم

این مقاله از سوی «مرکز رفع خطاهای وردپرسی پشتیبان وردپرس» تهیه شده و هدف آن این است که به زبان ساده و عملی به شما کمک کند بک‌دورهای (Backdoor) مخرب را در سایت وردپرسی‌تان شناسایی، حذف و جلوی بازگشت‌شان را سد کنید. تلاش کرده‌ایم از زیاده‌گویی فنی دوری کنیم، اما در نقاط لازم جزئیات کاربردی ارائه دهیم تا هم مدیران سایت‌ها و هم متخصصان تازه‌کار امنیت وب بتوانند با اطمینان عمل کنند.

بک‌دور چیست و چرا خطرناک است؟

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

در وردپرس، بک‌دورها معمولاً در یکی از این نقاط جا خوش می‌کنند:

  • فایل‌های هسته و کتابخانه‌ها (مثل پوشه‌های wp-includes یا حتی فایل‌های اصلی هسته)
  • فایل‌های قالب و افزونه‌ها (مثلاً داخل functions.php یا فایل‌های ناشناس)
  • دایرکتوری آپلودها (wp-content/uploads/)؛ چون کاربران و افزونه‌ها فایل‌های زیادی آنجا می‌ریزند
  • فایل‌های پیکربندی و قوانین وب‌سرور (مثل wp-config.php و .htaccess)

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

نشانه‌های آلودگی و وجود بک‌دور

قبل از شروع کار، علائمی که معمولاً کنار بک‌دورها دیده می‌شود را مرور کنیم. این نشانه‌ها تضمینی نیستند، اما چراغ‌های هشدار خوبی‌اند:

  • ریدایرکت‌های ناخواسته: کاربران موبایل یا ورودی از گوگل به صفحات شرط‌بندی/دارویی منحرف می‌شوند، اما مدیر سایت نمی‌تواند مشکل را بازتولید کند.
  • افزایش ناگهانی مصرف منابع: هاست گزارش CPU/IO بالا می‌دهد یا بار سرور بی‌دلیل زیاد شده است.
  • ایجاد اکانت‌های مدیر جدید: کاربرانی با نقش Administrator که شما نساخته‌اید.
  • اسکریپت‌های ناشناس: فایل‌های PHP با نام‌های شبیه فایل‌های وردپرس ولی با اختلافات ظریف (مثل wp-login-new.php یا class.wp-xyz.php).
  • تغییرات خودکار در .htaccess: قوانین عجیب برای ریدایرکت‌، ماسک‌کردن مسیرها یا اجرای کد.
  • صفحات اسپم در نتایج جستجو: ایندکس‌شدن صفحات عجیب با کلمات کلیدی بی‌ربط.
  • ایمیل‌های اسپم از دامنه شما: سرویس ایمیل یا هاست به شما درباره ارسال انبوه هشدار می‌دهد.

اگر حتی یکی از این موارد را دیدید، طبق مراحل زیر پیش بروید.

قدم صفر: آماده‌سازی و مدیریت بحران

اولین قدم شما بعد از دیدن نشانه‌ها، مدیریت بحران است؛ چند کار ساده اما حیاتی:

  1. ایزوله موقت: اگر آلودگی گسترده است یا ریدایرکت‌های تهاجمی دارید، سایت را موقتاً در حالت نگهداری قرار دهید یا دسترسی عمومی را با رمز ساده (Basic Auth) محدود کنید. هدف: جلوگیری از گسترش و آسیب بیشتر.
  2. تهیه نسخه پشتیبان کامل: از همه فایل‌ها و پایگاه‌داده یک بکاپ فوری بگیرید—even اگر آلوده باشد. این بکاپ بعداً برای تحلیل و مقایسه بسیار مفید است.
  3. ثبت شواهد: زمان مشاهده علامت‌ها، لاگ‌های دسترسی/خطا (access/error logs) و رویدادهای امنیتی را ذخیره کنید. اگر به الزامات قانونی یا شکایت نیاز شد، این شواهد ارزشمندند.
  4. بررسی دامنه و ایمیل: اگر اسپم ایمیلی دارید، موقتاً ارسال را محدود کنید تا IP شما در بلک‌لیست‌ها نماند.
  5. هماهنگی داخلی: اگر تیمی هستید، مسئولیت‌ها را مشخص کنید: چه کسی اسکن می‌کند؟ چه کسی لاگ‌ها را می‌خواند؟ چه کسی با هاست هماهنگ می‌شود؟

نقشه راه ۷ مرحله‌ای شناسایی و حذف بک‌دور

۱) تشخیص الگوی ورود مهاجم (سرنخ‌ها را جدی بگیرید)

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

  • آسیب‌پذیری یک افزونه/قالب: افزونه‌های قدیمی با باگ‌های شناخته‌شده، رایج‌ترین ورودها هستند.
  • رمزهای ضعیف: ورود مستقیم به /wp-login.php با Brute Force یا Credential Stuffing.
  • آپلود فایل مخرب: از طریق فرم‌ها یا ماژول‌های آپلود.
  • پیکربندی نادرست سرور: اجرای PHP در پوشه‌های عمومی مثل uploads.

این شناخت به شما کمک می‌کند بعد از پاکسازی، رخنه را ببندید که دوباره تکرار نشود.

۲) اسکن اولیه و مقایسه فایل‌ها

الف) استفاده از اسکنرهای امنیتی معتبر

اگر دسترسی مدیریتی دارید، یکی از راهکارهای زیر را برای اسکن سریع به کار بگیرید (روی سایت زنده یا ترجیحاً روی کپی استیجینگ):

  • افزونه‌های امنیتی شناخته‌شده برای اسکن فایل‌ها و یکپارچگی هسته
  • سرویس‌های اسکن از راه دور برای کشف ریدایرکت و تزریق‌ها

هدف این مرحله نمای کلی از نقاط مشکوک است، نه لزوماً حذف کامل.

ب) مقایسه با نسخه تمیز

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

# فایل‌های تغییر‌یافته 3 روز اخیر را پیدا کن

find . -type f -mtime -3

# دنبال الگوهای خطرناک در کدها بگرد

grep -R --line-number -E "base64_decode|eval\(|assert\(|shell_exec|system\(|passthru\(|preg_replace\(/e|gzuncompress|str_rot13|create_function" .

توجه: وجود این توابع لزوماً به معنی آلودگی نیست، اما در بک‌دورها بسیار رایج‌اند. نتایج را با دقت تحلیل کنید.

پ) بررسی یکپارچگی هسته با WP-CLI

اگر WP-CLI دارید:

wp core verify-checksums

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

wp core download --force

(این کار فایل‌های سفارشی در هسته را می‌پوشاند؛ بنابراین قبلش بکاپ داشته باشید.)

۳) مکان‌های داغ برای پیداکردن بک‌دور

در تجربیات عملی، این مسیرها و فایل‌ها، پرتکرارترین پناهگاه‌های بک‌دورند:

  • wp-content/uploads/
    اصولاً نباید فایل PHP اینجا وجود داشته باشد. هر فایل .php پیدا کردید، شدیداً مشکوک است.
  • wp-content/themes/<active-theme>/functions.php و فایل‌های جدید با نام‌های غیرمعمول
    فایل‌های جدید با چند حرف تصادفی یا شباهت اسمی با فایل‌های اصلی.
  • wp-content/plugins/
    افزونه‌هایی با نام ناشناس، یا پوشه‌هایی که در مخزن اصلی وجود ندارند.
  • wp-config.php
    افزوده‌شدن خطوط رمزگذاری‌شده یا include فایل‌هایی با مسیرهای عجیب.
  • .htaccess
    قوانین ریدایرکت مخفی برای ترافیک موتورهای جستجو یا کاربران موبایل.

برای .htaccess، اگر Apache 2.4 دارید، خطوطی مثل زیر برای مسدودکردن اجرای PHP در آپلودها مفید است (در مسیر wp-content/uploads/):

# Apache 2.4

<FilesMatch "\.php$">

  Require all denied

</FilesMatch>

در Apache قدیمی‌تر (۲.۲)، ممکن است به شکل زیر نیاز باشد:

# Apache 2.2

<FilesMatch "\.php$">

  Order deny,allow

  Deny from all

</FilesMatch>

اگر Nginx دارید، این قوانین باید در پیکربندی سرور اعمال شود (نه در .htaccess).

۴) پاکسازی گام‌به‌گام (با کمترین ریسک)

پاکسازی را با کمترین تغییرات مخرب آغاز کنید و سپس به مراحل تهاجمی‌تر بروید:

  1. هسته وردپرس را بازنویسی کنید (طبق دستور WP-CLI یا با بارگذاری دستی نسخه رسمی).
  2. قالب فعال را با نسخه سالم جایگزین کنید. اگر قالب نال‌شده یا ناشناس است، همین‌جا توقف کنید و یک قالب معتبر نصب کنید.
  3. افزونه‌ها:
    • هر افزونه غیرضروری یا ناشناس را حذف (نه غیرفعال) کنید.
    • بقیه را به آخرین نسخه امن به‌روزرسانی کنید.
  4. آپلودها:
    • هر فایل .php را از uploads حذف کنید.
    • اگر فایل‌های تصویر با پسوند دوتایی (مثل image.jpg.php) دارید، پاک کنید.
  5. فایل‌های ناشناس:
    • هر فایلی خارج از ساختار شناخته‌شده وردپرس که اخیراً ایجاد شده را بررسی و در صورت مشکوک‌بودن حذف کنید.
  6. پایگاه‌داده:
    • جداول wp_options (گزینه‌هایی با نام‌های عجیب، ریدایرکت مخفی، Autoload بالا)،
    • wp_users (مدیران ناشناس)،
    • wp_posts (کدهای جاوااسکریپت یا iframe مخرب در محتوا/برچسب‌ها).
      در صورت لزوم، محتوای آلوده را پاک یا پاک‌سازی کنید.
  7. رمزها و کلیدها:
    • همه رمزهای مدیران، FTP/SFTP، دیتابیس و هاست را تعویض کنید.
    • کلید و Salts وردپرس را در wp-config.php به‌روز کنید (دوباره تولید کنید).

۵) بستن رخنه (Hardening بعد از پاکسازی)

بعد از پاکسازی، باید کاری کنید که برگشت دوباره سخت شود:

  • غیرفعال‌کردن ویرایشگر فایل داخل پیشخوان:
// wp-config.php

define('DISALLOW_FILE_EDIT', true);
  • محدودکردن اجرای PHP در آپلودها (کدهای بالا برای Apache را ببینید؛ برای Nginx باید rule سمت سرور اضافه شود).
  • تنظیم دسترسی فایل‌ها/پوشه‌ها:
    • پوشه‌ها: 755
    • فایل‌ها: 644
      در صورت نیاز فایل‌های حساس مثل wp-config.php را محدودتر کنید (مثلاً 600).
  • فعال‌کردن احراز هویت چندمرحله‌ای (2FA) برای مدیران.
  • محدودکردن تلاش‌های ناموفق ورود و بررسی IPهای مشکوک.
  • بستن یا محدودکردن xmlrpc.php اگر استفاده نمی‌کنید (یا با WAF محدود کنید).
  • استفاده از WAF/CDN معتبر برای فیلتر حملات و Rate Limit.
  • به‌روزرسانی مستمر وردپرس/افزونه‌ها/قالب‌ها و حذف موارد بلااستفاده.
  • ایمن‌سازی فرم‌های آپلود: فقط پسوندهای مجاز، بررسی MIME، محدودیت حجم، و اگر لازم نیست، اصلاً آپلود نگیرید.

۶) پایش مداوم و هشداردهی

امنیت یک پروژه «یک‌بار برای همیشه» نیست. سامانه‌های مانیتورینگ تغییرات فایل، هشدار ورود مدیران، و گزارش‌های دوره‌ای اسکن باعث می‌شود بک‌دورهای تازه فوراً دیده شوند. اگر دسترسی به SSH دارید:

# فهرست فایل‌هایی که پس از تاریخ مشخص تغییر کرده‌اند

find . -type f -newermt "2025-01-01" -print

همچنین لاگ‌های وب‌سرور را به‌صورت دوره‌ای بررسی کنید؛ الگوهایی مثل درخواست‌های POST به فایل‌های ناشناس در uploads یا ترافیک به اسکریپت‌هایی با نام‌های تصادفی، معمولاً زنگ خطرند.

۷) سناریوهای خاص و تصمیم‌های سخت

گاهی پاکسازی دستی واقعاً صرفه ندارد:

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

خطاهای رایج در پاکسازی بک‌دور (و راه درست)

  • حذف علائم، نه علت: صرفاً فایل اسپم یا صفحه مخرب را حذف می‌کنند، اما بک‌دور می‌ماند.
    راه‌حل: هسته، قالب، افزونه‌ها، آپلودها و دیتابیس را همه‌جانبه بررسی کنید.
  • بازگردانی بکاپ آلوده: بعضی‌ها بدون بررسی، بکاپ دیروز را برمی‌گردانند و آلودگی را تثبیت می‌کنند.
    راه‌حل: بکاپ‌ها را روی محیط آزمایشی اسکن کنید و تاریخ شروع آلودگی را پیدا کنید.
  • به‌روزرسانی بدون حذف عوامل ناشناس: افزونه نال یا ناشناس را فقط آپدیت می‌کنند.
    راه‌حل: هرآنچه منبعش مشخص نیست را حذف و با نسخه رسمی جایگزین کنید.
  • نادیده‌گرفتن دیتابیس: فکر می‌کنند آلودگی فقط فایل است.
    راه‌حل: wp_options, wp_posts, wp_users و wp_usermeta را هم بررسی کنید.
  • عدم تعویض رمزها و Salts: بعد از پاکسازی، مهاجم همچنان با توکن‌های قبلی وارد می‌شود.
    راه‌حل: همه رمزها و کلیدها را عوض کنید.

چک‌لیست سریع عملیاتی

  • سایت را ایزوله/در حالت نگهداری قرار دهید
  • بکاپ کامل (فایل + دیتابیس) بگیرید
  • اسکن اولیه و استخراج مسیرهای مشکوک
  • بازنویسی هسته وردپرس
  • جایگزینی قالب و افزونه‌ها با نسخه‌های سالم
  • حذف فایل‌های PHP از uploads
  • بررسی و پاکسازی دیتابیس (گزینه‌ها، کاربران، محتوا)
  • تعویض رمزها (وردپرس/هاست/FTP/DB) و به‌روزرسانی Salts
  • اعمال Hardening (عدم اجرای PHP در آپلودها، DISALLOW_FILE_EDIT، مجوزها)
  • فعال‌سازی 2FA، محدودیت ورود، WAF
  • تنظیم مانیتورینگ و اسکن دوره‌ای

نمونه کارهای تخصصی: ریزه‌کاری‌هایی که تفاوت می‌سازند

  • تحلیل Diff هوشمند: اگر مخزن گیت دارید، تفاوت بین نسخه سالم و فعلی را بگیرید تا فایل‌های اضافه‌شده/تغییر‌یافته سریعاً مشخص شوند.
  • بررسی Cronها: wp cron event list را ببینید. رویدادهای ناشناس که اسکریپت‌های خاص را مرتباً فراخوانی می‌کنند، می‌توانند محل بازنویسی بک‌دور باشند.
  • محدودکردن دسترسی نوشتن: اگر امکان دارد، محیط Production را read-only کنید و فقط مسیرهای لازم (آپلود رسانه) اجازه نوشتن داشته باشند.
  • تفکیک محیط‌ها: سایت اصلی، استیجینگ و توسعه را جدا نگه دارید تا آلودگی متقابل ایجاد نشود.
  • هشدارهای ایمیلی/اسلک: برای تغییر فایل‌ها و ورود مدیران اعلان فوری بفرستید.

پرسش‌های پرتکرار (FAQ)

آیا پاکسازی با یک افزونه امنیتی کافی است؟

افزونه‌ها برای شناسایی و کاهش ریسک عالی‌اند، اما تضمین ۱۰۰٪ نیستند. بک‌دورها ممکن است طوری استتار شوند که از دید اسکنر خارج بمانند. بهترین رویکرد، ترکیب اسکنر + بررسی دستی + بازنویسی بخش‌های حساس است.

اگر فایل‌های آلوده را حذف کنم سایت نمی‌ریزد؟

برای هسته، بهترین کار بازنویسی با نسخه رسمی است. برای قالب/افزونه، اگر فایل حذف‌شده جزئی از بسته رسمی نبود، حذفش مشکلی ایجاد نمی‌کند؛ اما همیشه قبلش بکاپ بگیرید.

چطور بفهمم تاریخ شروع آلودگی چه زمانی بوده؟

به لاگ‌ها، تاریخ تغییر فایل‌ها و ایندکس‌های گوگل نگاه کنید. اولین بار که صفحه اسپم دیده شد یا اولین ریدایرکت گزارش شد، سرنخ خوبی است. با این تاریخ، بکاپ سالم مناسب را پیدا کنید.

آیا تغییر هاست مشکل را حل می‌کند؟

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

نکاتی برای پیشگیری بلندمدت

  • فرهنگ به‌روزرسانی: هر افزونه/قالبی که به‌روز نمی‌شود یا توسعه‌اش متوقف شده، در میان‌مدت ریسک است. جایگزین بیابید.
  • مینیمال‌گرایی: افزونه‌های اضافی را حذف کنید. هرچه کد کمتر، سطح حمله کمتر.
  • سیاست رمز قوی: رمزهای طولانی، منحصربه‌فرد و مدیر رمز (Password Manager).
  • تفویض دسترسی اصولی: نقش‌ها را محدود کنید؛ برای کارهای موقت، اکانت موقت بسازید و بعد حذف کنید.
  • پشتیبان‌گیری هوشمند: بکاپ‌های چندنسخه‌ای و خارج از سرور (Off-site)، تست بازیابی در بازه‌های زمانی.
  • مستندسازی: هر تغییر مهم، نصب افزونه، یا رخداد امنیتی را ثبت کنید تا در رخداد بعدی تشخیص سریع‌تر شود.

جمع‌بندی

بک‌دورها پیچیده‌اند چون پنهان‌کار هستند. شما ممکن است علائم ظاهری را پاک کنید، اما تا زمانی که مسیر پنهانی دسترسی مهاجم را نبندید، خطر بازگشت باقی است. رویکرد درست این است که به‌صورت قدم‌به‌قدم پیش بروید:
ایزوله → اسکن چندلایه → بازنویسی بخش‌های حیاتی → پاکسازی دیتابیس → تعویض اعتبارها → سخت‌سازی → پایش دائمی.

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

موفق و ایمن باشید.

مقالات مرتبط

آموزش فشرده پشتیبانی سایت

فقط با ۲۰ ساعت آموزش یاد بگیر سایت وردپرسیت رو اصولی نگهداری کنی !!!

فهرست این مقاله شامل:

آموزش فشرده پشتیبانی سایت

فقط با ۲۰ ساعت آموزش یاد بگیر سایت وردپرسیت رو اصولی نگهداری کنی !!!

جدیدترین اخبـار را در شبکه هــای اجتــماعی ما دنبال کنید

ورود به صفحه اینستاگرام پشتیبان وردپرس

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *