Merhaba,

Sizlerle bugün paylaşmak istediğim kod, wordpress login girişlerini sınırlama ile ilgili. Eklenti kullanmaya karşı olduğum için Limit Login Attempts eklentisinin alternatifi olarak düşünebilirsiniz.

Vereceğim kodu functions.php dosyasına ekledikten sonra zaman aralığını ve giriş sayısını kendinize göre düzenleyebilirsiniz. Sevgiler herkese.

/**
* CLASS LIMIT LOGIN ATTEMPTS
* Prevent Mass WordPress Login Attacks by setting locking the system when login fail.
* To be added in functions.php or as an external file.
*/
if ( ! class_exists( 'Limit_Login_Attempts' ) ) {
    class Limit_Login_Attempts {
        var $failed_login_limit = 3;                    //Giris Denemesi
        var $lockout_duration   = 1800;                 //Sureyi sn cinsinden giriniz. 30 dakika: 60*30 = 1800
        var $transient_name     = 'attempted_login';    //Transient used

        public function __construct() {
        add_filter( 'authenticate', array( $this, 'check_attempted_login' ), 30, 3 );
        add_action( 'wp_login_failed', array( $this, 'login_failed' ), 10, 1 );
        }

        /**
        * Lock login attempts of failed login limit is reached
        */
        public function check_attempted_login( $user, $username, $password ) {
            if ( get_transient( $this->transient_name ) ) {
                $datas = get_transient( $this->transient_name );
                if ( $datas['tried'] >= $this->failed_login_limit ) {
                    $until = get_option( '_transient_timeout_' . $this->transient_name );
                    $time = $this->when( $until );
                    //Display error message to the user when limit is reached
                    return new WP_Error( 'too_many_tried', sprintf( __( '<strong>HATA</strong>: Kimlik dogrulama sinirina ulastiniz, %1$s sonra lutfen tekrar deneyiniz.' ) , $time ) );
                }
            }
            return $user;
        }

        /**
        * Add transient
        */
        public function login_failed( $username ) {
            if ( get_transient( $this->transient_name ) ) {
                $datas = get_transient( $this->transient_name );
                $datas['tried']++;
            if ( $datas['tried'] <= $this->failed_login_limit )
                set_transient( $this->transient_name, $datas , $this->lockout_duration );
            } else {
                $datas = array(
                'tried'     => 1
            );
                set_transient( $this->transient_name, $datas , $this->lockout_duration );
            }
        }

        /**
        * Return difference between 2 given dates
        * @param  int      $time   Date as Unix timestamp
        * @return string           Return string
        */
        private function when( $time ) {
            if ( ! $time )
            return;
                $right_now = time();
                $diff = abs( $right_now - $time );
                $second = 1;
                $minute = $second * 60;
                $hour = $minute * 60;
                $day = $hour * 24;
            if ( $diff < $minute )
                return floor( $diff / $second ) . ' saniye';
            if ( $diff < $minute * 2 )
                return "yaklasik 1 dakika once";
            if ( $diff < $hour )
                return floor( $diff / $minute ) . ' dakika';
            if ( $diff < $hour * 2 )
                return 'yaklasik  1 saat once';
                return floor( $diff / $hour ) . ' saat';
        }
    }
}
//Enable it:
new Limit_Login_Attempts();

Bir önceki yazımız olan Admin Toolbar'dan WordPress Logosunu Kaldırma başlıklı makalemizi de okumanızı öneririz.

1 Yorum

  • Okan
    01 Eyl 2018

    Özlem Hanım Merhaba,
    Kendi sitemde test ettim çalışıyor.
    Plugin olmaması çok güzel.

Konuya Yorumunuzu Bekliyorum