
به اشتراک بگذارید

به اشتراک بگذارید
امنیت وردپرس | بلاگ وبداده
افزودن سؤال امنیتی به فرم ورود وردپرس

functions.php «قالب فرزند» یا افزونهای مثل Code Snippets بگذارید تا با بهروزرسانی قالب پاک نشود.login_form است (این اکشن دقیقاً بعد از فیلد رمز اجرا میشود):wp_authenticate_user استفاده میکنیم. این فیلتر باید یا شیء کاربر را برگرداند (ورود موفق) یا یک شیء WP_Error (ردِ ورود):wp_hash_password) و با wp_check_password بسنجید تا پاسخ بهصورت متن ساده در فایل نماند. همین منطق را با هوکهای register_form و registration_errors میتوانید برای فرم ثبتنام هم پیاده کنید. (مرجع: مستندات رسمی developer.wordpress.org)
| روش | دانش فنی لازم | کجا اعمال میشود | امنیت واقعی |
|---|---|---|---|
| افزونه پرسش امنیتی اختصاصی | کم (بدون کد) | ورود، ثبتنام، فراموشی رمز | کم (افزونه اصلی رهاشده است) |
| کد سفارشی (login_form + wp_authenticate_user) | متوسط (کد) | فرم ورود | کم تا متوسط (بازدارنده ربات) |
| کپچا / کپچای ریاضی | کم | فرم ورود و ثبتنام | متوسط (ضد ربات) |
| احراز هویت دومرحلهای (2FA) | کم تا متوسط | فرم ورود همه کاربران | بالا (توصیه استانداردها) |
XML-RPC یا API برود، ممکن است دور زده شود. پس پرسش امنیتی را فقط بهعنوان یک «لایه مکمل ضد ربات» نگه دارید.تا حدی و در برابر رباتهای ساده، بله. یک فیلد غیرمنتظره بخش بزرگی از حملههای خودکار را خنثی میکند. اما در برابر یک مهاجم هدفمند که میتواند پاسخ را حدس بزند یا جستجو کند، امنیت چندانی ندارد. بهترین حالت این است که آن را در کنار رمز قوی و احراز هویت دومرحلهای ببینید، نه بهجای آنها.
افزونه قدیمی و محبوب «WP Security Question» از سال 2021 بهدلیل مشکل امنیتی از مخزن وردپرس بسته شده و توصیه نمیشود. اگر راه بدون کد میخواهید، بهجای آن یک افزونه احراز هویت دومرحلهای فعال و بهروز (مثل WP 2FA یا miniOrange 2FA) یا یک افزونه کپچا نصب کنید که هم نگهداری میشوند و هم امنیت بیشتری میدهند.
بله. با اکشن login_form فیلد پرسش را زیر فرم ورود نمایش میدهید و با فیلتر wp_authenticate_user پاسخ را بررسی میکنید؛ اگر پاسخ اشتباه باشد، یک WP_Error برمیگردانید تا ورود رد شود. کد را حتماً در قالب فرزند یا افزونه مدیریت کد قرار دهید.
از طریق کنترلپنل هاست یا FTP وارد فایلها شوید و کدی را که اضافه کردهاید از functions.php حذف کنید تا فرم ورود به حالت عادی برگردد. به همین دلیل است که گرفتن بکاپ و داشتن دسترسی FTP قبل از شروع ضروری است.
احراز هویت دومرحلهای بهمراتب امنتر است. در 2FA یک کد یکبارمصرف و زماندار از اپلیکیشن یا پیامک لازم است که مهاجم آن را در اختیار ندارد، در حالیکه پاسخ سؤال امنیتی ثابت و قابلحدس است. استانداردهای امنیتی مثل NIST هم استفاده از سؤالات امنیتی را توصیه نمیکنند.
تا حدی. چون رباتهای Brute Force معمولاً فقط دو فیلد نام کاربری و رمز را پر میکنند، فیلد سوم بسیاری از این تلاشها را ناکام میگذارد. اما برای محافظت جدیتر، بهتر است آن را با محدودکردن تعداد تلاشهای ناموفق ورود و فعالکردن 2FA ترکیب کنید.
پرسشی که پاسخش عمومی نباشد و در شبکههای اجتماعی یا اینترنت پیدا نشود. از سؤالات کلیشهای مثل «نام شهر تولد» یا «نام حیوان خانگی» پرهیز کنید. بهترین کار این است که پاسخ را مثل یک رمز عبور دوم در نظر بگیرید و حتی آن را در یک مدیر رمز عبور ذخیره کنید.
روی سرعت بارگذاری صفحات عمومی سایت اثر محسوسی ندارد، چون فقط روی فرم ورود اعمال میشود. اما تجربه ورود را کمی طولانیتر میکند و اگر تعداد کاربران سایت زیاد باشد، مدیریت پاسخها دشوار میشود؛ برای سایتهای چندکاربره، 2FA انتخاب عملیتری است.