
به اشتراک بگذارید
امنیت وردپرس | بلاگ وبداده
افزودن سؤال امنیتی به فرم ورود وردپرس
- روش بدون کد: افزونههای نگهداریشده؛ افزونه قدیمیِ محبوب بهدلیل مشکل امنیتی بسته شده و دیگر توصیه نمیشود.
- روش کدنویسی: افزودن فیلد پرسش با دو هوک رسمی login_form و wp_authenticate_user، بدون هیچ افزونهای.
- محدودیت مهم: این روش از نظر استانداردهای امنیتی ضعیف است و فقط یک لایه مکمل ضد ربات بهشمار میآید.
- انتخاب امنتر: احراز هویت دومرحلهای (2FA) همراه با محدودکردن تلاشهای ناموفق ورود.
در یک نگاه
سؤال امنیتی به فرم ورود وردپرس چیست و چرا اهمیت دارد؟
تشبیه کاربردی

پیشنیازها و آمادهسازی قبل از شروع
۱) دسترسی و بکاپ
۲) قالب فرزند یا افزونه کد
functions.php «قالب فرزند» یا افزونهای مثل Code Snippets بگذارید تا با بهروزرسانی قالب پاک نشود.۳) انتخاب پرسش و پاسخ امن
پیش از هر تغییری، بکاپ
روشهای عملی برای افزودن پرسش امنیتی
روش اول (بدون کد): افزونه — با یک هشدار مهم
افزونه محبوب قدیمی دیگر در دسترس نیست
روش دوم (با کد): افزودن فیلد پرسش با هوکهای رسمی
login_form است (این اکشن دقیقاً بعد از فیلد رمز اجرا میشود):<?php
// گام ۱: نمایش فیلد پرسش امنیتی زیر فرم ورود وردپرس
// این کد را در functions.php قالب فرزند قرار دهید.
add_action( 'login_form', 'webdade_add_security_question' );
function webdade_add_security_question() {
?>
<p>
<label for="webdade_sq">نام نخستین مدرسهای که در آن درس خواندید چیست؟<br />
<input type="text" name="webdade_sq" id="webdade_sq" class="input"
size="20" autocomplete="off" />
</label>
</p>
<?php
}PHPwp_authenticate_user استفاده میکنیم. این فیلتر باید یا شیء کاربر را برگرداند (ورود موفق) یا یک شیء WP_Error (ردِ ورود):<?php
// گام ۲: بررسی پاسخ پرسش امنیتی هنگام ورود
add_filter( 'wp_authenticate_user', 'webdade_check_security_question', 10, 2 );
function webdade_check_security_question( $user, $password ) {
$answer = isset( $_POST['webdade_sq'] )
? strtolower( trim( $_POST['webdade_sq'] ) )
: '';
$correct = 'mehr'; // پاسخ صحیح خود را اینجا قرار دهید (با حروف کوچک)
if ( $answer !== $correct ) {
return new WP_Error(
'sq_error',
'<strong>خطا:</strong> پاسخ پرسش امنیتی درست نیست.'
);
}
return $user;
}PHPنکته فنی درباره ذخیره امن پاسخ
wp_hash_password) و با wp_check_password بسنجید تا پاسخ بهصورت متن ساده در فایل نماند. همین منطق را با هوکهای register_form و registration_errors میتوانید برای فرم ثبتنام هم پیاده کنید. (مرجع: مستندات رسمی developer.wordpress.org)
جدول مقایسه روشهای محافظت از فرم ورود
| روش | دانش فنی لازم | کجا اعمال میشود | امنیت واقعی |
|---|---|---|---|
| افزونه پرسش امنیتی اختصاصی | کم (بدون کد) | ورود، ثبتنام، فراموشی رمز | کم (افزونه اصلی رهاشده است) |
| کد سفارشی (login_form + wp_authenticate_user) | متوسط (کد) | فرم ورود | کم تا متوسط (بازدارنده ربات) |
| کپچا / کپچای ریاضی | کم | فرم ورود و ثبتنام | متوسط (ضد ربات) |
| احراز هویت دومرحلهای (2FA) | کم تا متوسط | فرم ورود همه کاربران | بالا (توصیه استانداردها) |
جمعبندی جدول
محدودیتها و جایگزینهای امنتر
سؤالات امنیتی از نظر استاندارد منسوخاند
XML-RPC یا API برود، ممکن است دور زده شود. پس پرسش امنیتی را فقط بهعنوان یک «لایه مکمل ضد ربات» نگه دارید.جایگزینها و لایههای قویتر
✅ محدودکردن تلاشهای ناموفق ورود: بستن موقت IP بعد از چند تلاش اشتباه، اثر مستقیمی روی حملات Brute Force دارد.
✅ کپچا روی فرم ورود: برای فیلتر رباتهای خودکار.
✅ رمز عبور قوی و یکتا بههمراه بهروزرسانی منظم هسته، قالب و افزونهها.
تجربه پشتیبانی وبداده
معایبی که باید بپذیرید
میزبانی امن وردپرس در وبداده
✅ دیتاسنترهای متنوع در ایران، هلند و آلمان برای انتخاب نزدیکترین لوکیشن.
✅ پشتیبانی فنی ۲۴ ساعته برای کمک در تنظیمات امنیتی، نصب افزونهها و رفع مشکل.
✅ دسترسی کامل به مدیر فایل و کنترلپنل برای اعمال آسان همین تغییرات.
پرسشهای پرتکرار درباره پرسش امنیتی فرم ورود
آیا پرسش امنیتی واقعاً امنیت فرم ورود را بالا میبرد؟
تا حدی و در برابر رباتهای ساده، بله. یک فیلد غیرمنتظره بخش بزرگی از حملههای خودکار را خنثی میکند. اما در برابر یک مهاجم هدفمند که میتواند پاسخ را حدس بزند یا جستجو کند، امنیت چندانی ندارد. بهترین حالت این است که آن را در کنار رمز قوی و احراز هویت دومرحلهای ببینید، نه بهجای آنها.
بهترین افزونه برای افزودن سؤال امنیتی به ورود وردپرس کدام است؟
افزونه قدیمی و محبوب «WP Security Question» از سال 2021 بهدلیل مشکل امنیتی از مخزن وردپرس بسته شده و توصیه نمیشود. اگر راه بدون کد میخواهید، بهجای آن یک افزونه احراز هویت دومرحلهای فعال و بهروز (مثل WP 2FA یا miniOrange 2FA) یا یک افزونه کپچا نصب کنید که هم نگهداری میشوند و هم امنیت بیشتری میدهند.
آیا میتوانم بدون افزونه و فقط با کد پرسش امنیتی اضافه کنم؟
بله. با اکشن login_form فیلد پرسش را زیر فرم ورود نمایش میدهید و با فیلتر wp_authenticate_user پاسخ را بررسی میکنید؛ اگر پاسخ اشتباه باشد، یک WP_Error برمیگردانید تا ورود رد شود. کد را حتماً در قالب فرزند یا افزونه مدیریت کد قرار دهید.
اگر پاسخ پرسش امنیتی را فراموش کنم یا کد اشتباه باشد، چه کنم؟
از طریق کنترلپنل هاست یا FTP وارد فایلها شوید و کدی را که اضافه کردهاید از functions.php حذف کنید تا فرم ورود به حالت عادی برگردد. به همین دلیل است که گرفتن بکاپ و داشتن دسترسی FTP قبل از شروع ضروری است.
سؤال امنیتی بهتر است یا احراز هویت دومرحلهای؟
احراز هویت دومرحلهای بهمراتب امنتر است. در 2FA یک کد یکبارمصرف و زماندار از اپلیکیشن یا پیامک لازم است که مهاجم آن را در اختیار ندارد، در حالیکه پاسخ سؤال امنیتی ثابت و قابلحدس است. استانداردهای امنیتی مثل NIST هم استفاده از سؤالات امنیتی را توصیه نمیکنند.
آیا پرسش امنیتی جلوی حملات Brute Force را میگیرد؟
تا حدی. چون رباتهای Brute Force معمولاً فقط دو فیلد نام کاربری و رمز را پر میکنند، فیلد سوم بسیاری از این تلاشها را ناکام میگذارد. اما برای محافظت جدیتر، بهتر است آن را با محدودکردن تعداد تلاشهای ناموفق ورود و فعالکردن 2FA ترکیب کنید.
چه پرسشی برای سؤال امنیتی مناسب است؟
پرسشی که پاسخش عمومی نباشد و در شبکههای اجتماعی یا اینترنت پیدا نشود. از سؤالات کلیشهای مثل «نام شهر تولد» یا «نام حیوان خانگی» پرهیز کنید. بهترین کار این است که پاسخ را مثل یک رمز عبور دوم در نظر بگیرید و حتی آن را در یک مدیر رمز عبور ذخیره کنید.
آیا افزودن پرسش امنیتی روی سرعت یا تجربه کاربری سایت اثر میگذارد؟
روی سرعت بارگذاری صفحات عمومی سایت اثر محسوسی ندارد، چون فقط روی فرم ورود اعمال میشود. اما تجربه ورود را کمی طولانیتر میکند و اگر تعداد کاربران سایت زیاد باشد، مدیریت پاسخها دشوار میشود؛ برای سایتهای چندکاربره، 2FA انتخاب عملیتری است.
جمعبندی و چکلیست امنیتی
چکلیست سریع امنیت ورود
✅ هسته، قالب و افزونهها را همیشه بهروز نگه دارید.
✅ احراز هویت دومرحلهای (2FA) را فعال کنید.
✅ تعداد تلاشهای ناموفق ورود را محدود کنید.
✅ در صورت تمایل، پرسش امنیتی یا کپچا را بهعنوان لایه مکمل اضافه کنید.
✅ بکاپ منظم از سایت و دیتابیس بگیرید.



