نویسنده: مستر نارگیل تاریخ انتشار: ۱۴۰۵/۰۵/۲۸

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

استفاده از افزونه‌های امنیتی

یکی از روش‌های ساده و کارآمد برای ارتقای امنیت وردپرس استفاده از افزونه‌های امنیتی است. بهترین افزونه‌های امنیتی به ترتیب عبارتند از Wordfence، iThemes Security و Sucuri Security. این افزونه‌ها در دو ورژن رایگان و پرمیوم ارايه میشود و ورژن رایگان آنها به اندازه کافی برای ایمن سازی وب‌سایت کافی است.

افزایش امنیت wp admin با کمک افزونه Wordfence

ابتدا به پیشخوان وردپرس بروید و این افزونه را نصب و فعال کنید.

نصب افزونه وردفنس

پس از نصب این افزونه از منوی Wordfence گزینه Login Security را انتخاب کنید.

تنظیمات صفحه لاگین افزونه وردفنس

در این قسمت میتوانید تنظیمات امنیتی صفحه ورود وردپرس را انجام دهید.

  • اگر از وب اپ خاصی استفاده نمیکنید گزینه Disable XML-RPC authentication را تیک بزنید.
  • اگر سایتتان فروشگاهی است و از افزونه ووکامرس استفاده میکنید گزینه WooCommerce integration را فعال کنید.
  • در صورتی که میخواهید ریکپچای گوگل را در فرم لاگین فعال کنید گزینه Enable reCAPTCHA on the login and user registration pages را فعال کنید و site key و secret key خود را از سایت گوگل تهیه کنید و در افزونه وارد کنید.
  • در آخر تنظیمات را ذخیره کنید.

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

افزایش امنیت wp admin با کمک کد سفارشی

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

// Limit login attempts by mrnargil
// https://mrnargil.ir/wp-admin-security

function check_attempted_login( $user, $username, $password ) {
    $try_limit = 4;
    if ( get_transient( 'attempted_login_'.$username ) ) {
        $datas = get_transient( 'attempted_login_'.$username );

        if ( $datas['tried'] >= $try_limit ) {
            $until = get_option( '_transient_timeout_' . 'attempted_login_'.$username );
            $time = time_to_go( $until );

            return new WP_Error( 'too_many_tried',  sprintf( __( 'ERROR: You have reached authentication limit, you will be able to try again in %1$s.' ) , $time ) );
        }
    }

    return $user;
}
add_filter( 'authenticate', 'check_attempted_login', 30, 3 ); 



function login_failed( $username ) {
    $ban_duration = 1;  // hour(s)
    
    if ( get_transient( 'attempted_login_'.$username ) ) {
        $datas = get_transient( 'attempted_login_'.$username );
        $datas['tried']++;

        if ( $datas['tried'] <= 3 )
            set_transient( 'attempted_login_'.$username, $datas , $ban_duration * 3600 );
    } else {
        $datas = array(
            'tried'     => 1
        );
        set_transient( 'attempted_login_'.$username, $datas , $ban_duration * 3600 );
    }
}
add_action( 'wp_login_failed', 'login_failed', 10, 1 ); 

function time_to_go($timestamp)
{

    // converting the mysql timestamp to php time
    $periods = array(
        "second",
        "minute",
        "hour",
        "day",
        "week",
        "month",
        "year"
    );
    $lengths = array(
        "60",
        "60",
        "24",
        "7",
        "4.35",
        "12"
    );
    $current_timestamp = time();
    $difference = abs($current_timestamp - $timestamp);
    for ($i = 0; $difference >= $lengths[$i] && $i < count($lengths) - 1; $i ++) {
        $difference /= $lengths[$i];
    }
    $difference = round($difference);
    if (isset($difference)) {
        if ($difference != 1)
            $periods[$i] .= "s";
            $output = "$difference $periods[$i]";
            return $output;
    }
}

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

  • $try_limit : تعداد دفعات مجاز برای ورود پسورد اشتباه قبل از بلاک شده
  • $ban_duration : مدت زمان بلاک شدن کاربر به ساعت

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

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