اولین باری که یکی از سایت‌های مشتری در یک حمله Brute Force (بروت‌فورس) از دسترس خارج شد، او مطمئن بود کار هکرهای حرفه‌ای است. اما وقتی لاگ‌ها را باز کردم، با هزاران درخواست POST به wp-login.php از یک IP (Internet Protocol، پروتکل اینترنت) چینی مواجه شدم که فقط رمزهای ساده را امتحان می‌کرد. آن روز فهمیدم بزرگ‌ترین خطر امنیتی وردپرس، حمله‌های پیچیده نیستند؛ حمله‌های ساده‌ای هستند که روی هزاران سایت به‌طور همزمان اجرا می‌شوند و فقط به یک سایت با رمز ضعیف نیاز دارند تا موفق شوند.

حمله Brute Force دقیقاً چیست و چگونه کار می‌کند؟

حمله Brute Force (که در فارسی گاهی با عنوان حمله جستجوی فراگیر یا حمله نیروی خام هم ترجمه می‌شود) یک روش هک است که در آن مهاجم به‌جای بهره‌بردن از یک آسیب‌پذیری نرم‌افزاری، از سادگی رمز عبور استفاده می‌کند. مکانیزم ساده است: مهاجم یک فهرست رمز عبور احتمالی در اختیار دارد و آن‌ها را به‌ترتیب روی نام کاربری هدف امتحان می‌کند تا یکی از آن‌ها درست از آب دربیاید. بعضی از این حملات از یک لیست ثابت مثل هزاران رمز پرکاربرد دنیا استفاده می‌کنند و بعضی دیگر از یک dictionary attack (حمله فرهنگ لغت) که کلمات رایج، اسم‌ها و ترکیب‌های ساده را امتحان می‌کند.

تفاوت این روش با حمله‌های پیچیده‌تر مثل SQL Injection یا XSS (Cross-Site Scripting، تزریق اسکریپت سمت کاربر) در این است که Brute Force به هیچ حفره نرم‌افزاری نیاز ندارد. حتی اگر سایت شما روی آخرین نسخه وردپرس باشد، تمام افزونه‌ها به‌روز باشند، و هاست شما امن‌ترین سرویس جهان باشد، اگر رمز عبور شما 123456 یا admin123 باشد، در نهایت یکی از این حمله‌ها موفق خواهد شد. اگر با مفهوم کلی بدافزار و روش‌های نفوذ آشنا نیستید، مقاله بدافزار چیست و چگونه وارد سایت می‌شود چارچوب جامعی از مسیرهای ورود به سایت ارائه می‌دهد.

حمله Brute Force، حمله به قفل نیست؛ حمله به فراموشی شماست که چرا قفل را محکم نبستید.

برای درک بهتر، یک محاسبه ساده انجام دهیم. اگر رمز عبور شما چهار رقم باشد (مثل ۱۲۳۴)، فقط ده هزار ترکیب ممکن وجود دارد. یک ربات ساده روی یک اینترنت معمولی می‌تواند این تعداد را در چند دقیقه امتحان کند. اگر رمز شما هشت رقم عددی باشد، این عدد به صد میلیون می‌رسد که چند ساعت زمان می‌برد. اما اگر همین هشت رقم از ترکیب حروف بزرگ، کوچک، اعداد و علائم باشد، تعداد ترکیب‌های ممکن به چند صد میلیارد می‌رسد و این حمله را از چند ساعت به چند دهه گسترش می‌دهد. تفاوت این دو رمز، تفاوت نجات یا سقوط سایت است.

مهاجم از کجا شروع می‌کند؟

در بیش از ۹۰ درصد حمله‌هایی که در لاگ‌ها دیده‌ام، اولین درخواست‌ها به سه آدرس زیر است:

  • /wp-login.php — صفحه ورود استاندارد وردپرس
  • /wp-admin/ — ورودی پنل مدیریت
  • /xmlrpc.php — رابط XML-RPC که اغلب نادیده گرفته می‌شود

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

چرا وردپرس هدف اصلی این حمله‌ها است؟

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

پیش‌فرض‌های مشکل‌ساز وردپرس

  • نام کاربری admin در نسخه‌های قدیمی: بعضی نصب‌های قدیمی وردپرس نام کاربری پیش‌فرض داشتند که امروز هم تعدادی از سایت‌ها همان را دارند. ربات‌های خودکار اول این نام را امتحان می‌کنند.
  • نمایش نام کاربری در URL نویسنده: در حالت permalink پیش‌فرض، بازدید از /?author=1 نام کاربری را به‌صورت عمومی نمایش می‌دهد.
  • صفحه ورود یکسان: هر سایت وردپرس صفحه ورود مشابهی دارد که در آدرس قابل‌شناسایی است.
  • xmlrpc.php فعال به‌صورت پیش‌فرض: این فایل حتی اگر از آن استفاده نکنید، به‌طور پیش‌فرض باز است و می‌تواند برای ارسال درخواست‌های متعدد به کار رود.
  • پیام خطای دقیق: وردپرس به‌طور پیش‌فرض تفاوت بین نام کاربری نامعتبر و رمز عبور اشتباه را نمایش می‌دهد که به مهاجم اجازه می‌دهد نام کاربری درست را کشف کند.

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

انواع حمله Brute Force که باید بشناسید

Brute Force یک روش واحد نیست؛ خانواده‌ای از روش‌ها است که هر کدام ویژگی‌های خاص خودشان را دارند. شناخت تفاوت‌ها به شما کمک می‌کند لایه دفاعی مناسب را انتخاب کنید.

نوع حملهویژگیدفاع مؤثر
Simple Brute Forceامتحان ترتیبی همه ترکیب‌هامحدودسازی ورود ناموفق
Dictionary Attackاستفاده از لیست رمزهای رایجرمز عبور قوی و منحصر به فرد
Credential Stuffingاستفاده از رمزهای افشاشده سایت‌های دیگررمز اختصاصی برای هر سایت
Reverse Brute Forceبرای هر رمز، چند نام کاربری امتحان می‌شودتغییر نام کاربری admin
Distributed Brute Forceحمله از IPهای متعددفایروال سطح ابری
Credential Reuseهمان رمز، سایت‌های مختلفمدیر رمز عبور

نوع Distributed (توزیع‌شده) یکی از چالشی‌ترین انواع است، چون محدودسازی ساده بر اساس IP در آن جواب نمی‌دهد. در این نوع حمله، هزاران IP از سراسر جهان هرکدام فقط چند بار تلاش می‌کنند؛ به‌طوری که هیچ‌کدام از نظر یک محدودسازی ساده، مشکل‌دار به‌نظر نمی‌رسند. اینجاست که فایروال‌های ابری مثل Cloudflare یا Sucuri ارزش خودشان را نشان می‌دهند؛ چون الگوها را در سطح کلی ترافیک تشخیص می‌دهند نه فقط در سطح یک IP.

در نبرد Brute Force، سؤال درست این نیست که رمز عبور شما چقدر قوی است؛ سؤال درست این است که چند بار می‌توانند آن را امتحان کنند.

نشانه‌های حمله فعال روی سایت شما

بیشتر حمله‌های Brute Force بی‌صدا هستند و شاید هرگز متوجه آن‌ها نشوید، چون در نهایت موفق نمی‌شوند. اما بعضی نشانه‌ها را باید جدی بگیرید:

  • کندی غیرعادی سایت در ساعات خاص: وقتی هزاران درخواست به wp-login.php می‌رسد، منابع سرور مصرف می‌شود و سایت کند می‌شود.
  • افزایش مصرف CPU در پنل هاست: اگر بدون افزایش ترافیک واقعی، مصرف پردازنده به‌طور ناگهانی بالا رفت، احتمال حمله جدی است.
  • اخطارهای قفل شدن حساب از طرف هاست: بعضی هاست‌ها وقتی فشار ناشی از حمله از حدی بگذرد، سایت را موقتاً تعلیق می‌کنند.
  • ایمیل‌های هشدار از افزونه‌های امنیتی: اگر افزونه امنیتی دارید و ایمیل هشدار ورود ناموفق دریافت می‌کنید، حتماً بررسی کنید که فقط سعی خودتان نبوده است.
  • لاگ‌های ورود پرحجم: در access.log سرور یا لاگ‌های افزونه امنیتی، ردپای هزاران درخواست POST به صفحه ورود دیده می‌شود.
  • رفرال‌های مشکوک: ورودی‌هایی که از IPهای خارجی و بدون هیچ الگوی معمول می‌آیند.

اگر این نشانه‌ها را دیدید، اولین کارتان باید بررسی باشد، نه وحشت. در بیشتر موارد، سایت هنوز آلوده نشده و فرصت دارید با تنظیمات درست، دفاع را تقویت کنید.

لایه‌های دفاعی مؤثر در برابر Brute Force

دفاع مؤثر در برابر Brute Force، از یک لایه واحد نمی‌آید؛ از ترکیب چند لایه ساخته می‌شود که هر کدام بخشی از حمله را خنثی می‌کنند. این رویکرد defense in depth (دفاع در عمق) نام دارد و در تمام سیستم‌های امنیتی جدی به‌کار می‌رود.

لایه اول: قدرت رمز عبور

هیچ لایه‌ای جای رمز عبور قوی را نمی‌گیرد. رمز عبور باید حداقل دوازده کاراکتر باشد، ترکیبی از حروف بزرگ و کوچک، اعداد و علائم ویژه. رمزهای رایج مثل نام کاربری، شماره تلفن، تاریخ تولد، اسم فرزند و کلمه password باید کاملاً کنار گذاشته شوند. یک مدیر رمز عبور مثل Bitwarden یا ۱Password برای تولید و ذخیره رمزهای قوی، ضروری است. اصول کامل این موضوع را جداگانه در مقالە مدیریت رمز عبور امن چه اصولی دارد نوشته‌ام.

لایه دوم: تغییر نام کاربری پیش‌فرض

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

لایه سوم: احراز هویت دو مرحله‌ای

احراز هویت دو مرحله‌ای (2FA — Two-Factor Authentication) یکی از قوی‌ترین لایه‌های دفاعی است. وقتی این قابلیت فعال باشد، حتی اگر مهاجم رمز عبور شما را کشف کند، بدون کد دوم که روی گوشی شما ارسال می‌شود نمی‌تواند وارد شود. در تجربه‌ام، این تنها لایه‌ای است که تا امروز هیچ حمله‌ای از آن عبور نکرده. راهنمای پیاده‌سازی این لایه به‌طور جداگانه در احراز هویت دو مرحله‌ای چگونه امنیت را افزایش می‌دهد آمده است.

لایه چهارم: محدودسازی ورود ناموفق

محدودسازی ورود ناموفق، قلب دفاع در برابر Brute Force است. این تنظیم مشخص می‌کند بعد از چند ورود ناموفق، دسترسی از آن IP برای مدتی مسدود شود. تنظیمات پیشنهادی من برای اکثر سایت‌ها این است: بعد از پنج ورود ناموفق در پانزده دقیقه، IP به مدت یک ساعت مسدود شود. بعضی افزونه‌ها قابلیت مسدودسازی دائمی بعد از تعداد مشخصی از تلاش‌ها را هم دارند که برای سایت‌های پرمخاطره توصیه می‌شود. تفاوت این روش با احراز هویت دو مرحله‌ای این است که محدودسازی به‌طور فعال جلوی حمله را می‌گیرد، در حالی که 2FA جلوی نفوذ بعد از کشف رمز را می‌گیرد.

لایه پنجم: فایروال سطح ابری

فایروال ابری مثل Cloudflare، درخواست‌ها را قبل از رسیدن به سرور شما فیلتر می‌کند. برای سایت‌هایی که ترافیک بین‌المللی دارند یا هدف حمله‌های توزیع‌شده هستند، این لایه می‌تواند تفاوت جدی در مصرف منابع هاست ایجاد کند. درباره تفاوت این نوع فایروال با فایروال سنتی سرور، در مقالە فایروال ابری در مقابل فایروال سنتی نوشته‌ام. و اگر می‌خواهید سطح سرور را هم تقویت کنید، فایروال نرم‌افزاری در سرور: راهنمای عملی مسیر کامل را نشان می‌دهد.

لایه ششم: پنهان کردن آدرس ورود

تغییر آدرس صفحه ورود از /wp-login.php به یک آدرس اختصاصی مثل /my-secret-login/، ربات‌های ساده‌ای که فقط آدرس‌های پیش‌فرض را امتحان می‌کنند، کاملاً بی‌اثر می‌کند. این لایه به‌تنهایی کافی نیست چون ربات‌های پیشرفته‌تر می‌توانند آدرس جدید را پیدا کنند، اما در ترکیب با لایه‌های دیگر، هزینه حمله را به‌شدت بالا می‌برد.

تنظیمات دقیق افزونه‌های محدودسازی ورود

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

تنظیمات پایه افزونه محدودسازی

در تنظیمات افزونه‌هایی مثل Limit Login Attempts Reloaded یا افزونه مشابه، این اعداد را در سایت‌های مختلف با موفقیت استفاده کرده‌ام:

  • حداکثر تلاش مجاز: ۵ بار برای IP، و ۱۵ بار برای نام کاربری (اگر افزونه از هر دو پشتیبانی کند)
  • مدت مسدودسازی: ۶۰ دقیقه در تلاش‌های اولیه
  • افزایش تدریجی زمان قفل: اگر افزونه از این قابلیت پشتیبانی می‌کند، فعال باشد
  • قفل طولانی بعد از تکرار: بعد از سه بار قفل شدن، مسدودسازی به ۲۴ ساعت افزایش پیدا کند
  • هشدار ایمیلی: برای مدیر سایت فعال باشد

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

لیست سفید (Whitelist) IP شخصی

قبل از فعال‌سازی محدودسازی، IP خودتان را در لیست سفید قرار دهید. اگر IP شما اشتراکی یا داینامیک باشد، احتمال قفل شدن ناخواسته بالا می‌رود. یک راه‌حل ساده که در پروژه‌ها استفاده کرده‌ام: یک IP ثابت اداری یا VPN شخصی برای دسترسی مدیریتی به سایت داشته باشید و آن را در لیست سفید قرار دهید.

غیرفعال‌سازی XML-RPC

فایل xmlrpc.php یک مسیر جانبی حمله است که کاربران زیادی از آن غافل می‌مانند. اگر از اپلیکیشن‌های موبایل وردپرس یا ابزارهایی مثل Jetpack استفاده نمی‌کنید، این فایل را غیرفعال کنید. روش ساده:

// در فایل .htaccess
<Files xmlrpc.php>
  Order Deny,Allow
  Deny from all
</Files>

یا با فیلتر در functions.php:

add_filter( 'xmlrpc_enabled', '__return_false' );

هر دو روش مؤثر است؛ اولی در سطح سرور جلوی دسترسی را می‌گیرد و دومی در سطح کد وردپرس. توصیه من استفاده از هر دو با هم است.

پنهان کردن پیام‌های خطای ورود

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

add_filter( 'login_errors', function() {
    return 'اطلاعات ورود نامعتبر است.';
} );

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

دفاع پیشرفته: راهکارهای سطح سرور و شبکه

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

استفاده از Fail2ban روی سرور

Fail2ban یک ابزار متن‌باز است که لاگ‌های سرور را می‌خواند و بر اساس الگوهای مشخص، IPهای مشکوک را در سطح فایروال سیستم مسدود می‌کند. برای سایت‌های روی VPS (Virtual Private Server، سرور مجازی) که به درخواست‌های زیادی پاسخ می‌دهند، این ابزار تقریباً یک الزام است. تنظیمات پیش‌فرض آن برای وردپرس کافی نیست، اما با یک jail (قاعده اختصاصی) می‌توانید آن را برای wp-login.php تنظیم کنید.

قواعد اختصاصی Cloudflare

در پلن رایگان Cloudflare می‌توانید Rules (قواعد) سفارشی تعریف کنید که مثلاً تمام درخواست‌های POST به /wp-login.php از کشورهای خاص را مسدود کند، یا درخواست‌هایی که با user agent مشکوک ارسال می‌شوند را Challenge کند. این تنظیمات در چند پروژه، حجم حمله‌ها را بیش از نود درصد کاهش داده است.

محدودسازی نرخ درخواست در Nginx یا LiteSpeed

اگر سرور شما Nginx یا LiteSpeed دارد، می‌توانید rate limiting (محدودسازی نرخ) در سطح وب‌سرور تعریف کنید. مثلاً حداکثر پنج درخواست به wp-login.php در دقیقه از یک IP. این تنظیمات در سطح سرور اجرا می‌شود و حتی بار اضافی هم به PHP تحمیل نمی‌کند. اگر با مفهوم سرور و وب‌سرور آشنایی کمتری دارید، مقاله مربوط به سرور و عملکردش در بخش مرور منابع این حوزه موجود است.

نکته مهم: تنظیم rate limiting باید هوشمندانه باشد، چون اگر خیلی سخت‌گیرانه باشد، کاربران واقعی را هم مسدود می‌کند. تنظیمات پیش‌فرض اکثر ابزارها برای شروع مناسب است؛ بعد از پایش چند روزه می‌توانید دقیق‌ترش کنید.

همکاری با هاست

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

اشتباهاتی که دفاع شما را بی‌اثر می‌کند

در بررسی امنیتی سایت‌های مختلف، اشتباهات تکراری‌ای دیده‌ام که هرچند ساده به‌نظر می‌رسند، کل لایه دفاعی را بی‌اثر می‌کنند.

استفاده از یک رمز در چند سایت

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

نادیده گرفتن لاگ‌ها

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

افزونه‌های غیرفعال که حذف نشده‌اند

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

فرآیند بازیابی رمز عبور ضعیف

حتی اگر رمز عبور شما قوی باشد، اگر فرآیند بازیابی آن ضعیف باشد، مهاجم می‌تواند از آن مسیر عبور کند. مطمئن شوید که ایمیل بازیابی رمز عبور، امن است و امکان بازیابی با پاسخ به سؤالات ساده مثل اسم مادر یا تاریخ تولد، فعال نیست. 2FA را روی ایمیل بازیابی هم فعال کنید.

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

اشتباه ششم که در بعضی پروژه‌ها دیده‌ام، نادیده گرفتن نقش افزونه‌های جانبی است. بعضی افزونه‌هایی که ظاهراً ربطی به امنیت ندارند — مثل بعضی افزونه‌های فرم یا آمار بازدید — می‌توانند در سطح API (Application Programming Interface، رابط برنامه‌نویسی) نقاط ورود اضافه ایجاد کنند. اگر با نقش API در وردپرس و مسیرهای امنیتی‌اش آشنا نیستید، API در وردپرس چارچوب کامل را ارائه می‌دهد.

پرسش‌های پرتکرار درباره حمله Brute Force

چطور بفهمم سایت من درگیر حمله Brute Force است؟

ساده‌ترین راه، نصب یک افزونه امنیتی با گزارش‌گیری است. افزونه‌های معتبر، ورودهای ناموفق را ثبت می‌کنند و در صورت تجاوز از حد مشخص، به شما هشدار می‌دهند. در سطح سرور، می‌توانید لاگ access.log را برای درخواست‌های POST به wp-login.php بررسی کنید. اگر تعدادشان در یک بازه کوتاه از چند ده تجاوز کرد، حمله در جریان است.

اگر محدودسازی ورود را فعال نکنم، چه اتفاقی می‌افتد؟

اگر رمز عبور شما بسیار قوی باشد و 2FA فعال باشد، ممکن است در کوتاه‌مدت مشکلی پیش نیاید. اما در بلندمدت، حمله‌ها منابع هاست شما را مصرف می‌کنند و اگر هاست شما اشتراکی باشد، حتی می‌تواند باعث تعلیق موقت سایت شود. به علاوه، احتمال موفقیت حمله‌های تصادفی وجود دارد؛ چون یک ربات در چند ساعت می‌تواند هزاران ترکیب را امتحان کند. در یک کلام: نمی‌توان به شانس تکیه کرد.

آیا استفاده از Cloudflare به‌تنهایی کافی است؟

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

بعد از یک حمله موفق، چه کارهایی باید انجام دهم؟

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

چرا Wordfence در بعضی سایت‌ها کندی ایجاد می‌کند؟

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

چرا باید XML-RPC را غیرفعال کنم؟

فایل xmlrpc.php اجازه می‌دهد از طریق رابط XML-RPC (Remote Procedure Call، فراخوانی رویه از راه دور) به سایت متصل شوید. اگر از اپلیکیشن موبایل وردپرس یا Jetpack استفاده نمی‌کنید، این فایل هیچ استفاده‌ای برای شما ندارد و فقط یک مسیر اضافه برای حمله Brute Force فراهم می‌کند. غیرفعال کردنش، مسیر حمله را بدون هیچ هزینه‌ای برای شما کم می‌کند.

کدام افزونه محدودسازی ورود بهتر است؟

جواب یکسان برای همه نیست. اگر سادگی و سبک بودن مهم‌تر است، Limit Login Attempts Reloaded یا افزونه‌های مشابه سبک انتخاب خوبی هستند. اگر به قابلیت‌های جامع‌تر و گزارش‌دهی نیاز دارید، Wordfence یا Solid Security گزینه‌های جدی هستند. انتخاب بین این‌ها بستگی به اندازه سایت، نوع هاست و سطح تحمل شما برای پیچیدگی تنظیمات دارد. نکته مهم‌تر از نوع افزونه، درست تنظیم کردن آن است.

نگاه آخر: چگونه بدون پیچیدگی، امن بمانیم؟

امنیت وردپرس در برابر Brute Force، یک پروژه پیچیده نیست؛ مجموعه‌ای از چند تصمیم ساده است که وقتی با هم ترکیب شوند، یک دیوار دفاعی جدی می‌سازند. رمز عبور قوی، نام کاربری غیرقابل حدس، احراز هویت دو مرحله‌ای، محدودسازی ورود ناموفق، پنهان کردن صفحه ورود، غیرفعال‌سازی xmlrpc، و یک فایروال ابری — این هفت کار در مجموع کمتر از سه ساعت وقت می‌گیرند، ولی می‌توانند شما را از روزها و ماه‌ها دردسر نجات دهند.

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

اگر تجربه‌ای از مواجهه با حمله Brute Force در پروژه‌های واقعی دارید — به‌خصوص اگر افزونه یا روش دفاعی مؤثری کشف کرده‌اید که در این مقاله نبود — در دیدگاه‌ها بنویسید. تجربه‌های میدانی شما، برای خواننده بعدی از هر مستند رسمی ارزشمندترند. 🔐