WordPress: Anmeldeversuche begrenzen (ohne Plugins)

Lesezeit: 4 Minuten

Ich suche nach einer Möglichkeit, die Anmeldeversuche eines Benutzers zu begrenzen. ich sah Dies Plugin, aber es wurde seit über 2 Jahren nicht aktualisiert … und wenn verfügbar, bevorzuge ich immer einen Weg, der keine Plugins beinhaltet. 🙂

Gibt es eine Variable, die eingestellt werden kann wp-config.php?

Gibt es sonst eine Möglichkeit, dies über die Webserver-Konfiguration zu erreichen? Ich habe nginx 1.7.4.

  • Hast du gesehen http://codex.wordpress.org/Brute_Force_Attacks#Plugins?

    – Rahil Wazir

    14. September 2014 um 18:38 Uhr


  • Ich verwende Limit Login Attempts immer noch als MU-Plugin und es funktioniert großartig für mich.

    – michaelrmcneill

    14. September 2014 um 19:14 Uhr

Obwohl der Beitrag ziemlich alt ist, werde ich meine Ergebnisse zur Verfügung stellen, da ich die Antwort bis heute selbst nicht finden konnte. Habe im Codex und so nachgesehen, aber überall wurde mir befohlen, ein Plugin zu verwenden – was ich nicht möchte.

Also um deine Frage zu beantworten:

Gibt es eine Variable, die in wp-config.php gesetzt werden kann?

Nein, es gibt keine Variable, die du in wp-config setzen kannst.

Gibt es sonst eine Möglichkeit, dies über die Webserver-Konfiguration zu erreichen? Ich habe nginx 1.7.4.

Ich bin kein Webserver-Zauberer, aber ich denke nicht.

Aber! – Davon Blogbeitrag von Etienne Tremel Ich habe verstanden, dass es einen Filter gibt:

add_filter( 'authenticate', (...)

und Funktionshaken:

add_action( 'wp_login_failed', (...)

können Sie verwenden, um in den Login-Prozess einzusteigen. Mit diesen Informationen konnte ich Anmeldeversuche mit meinem eigenen benutzerdefinierten Code antizipieren.

In seinem Blog-Artikel finden Sie einen Copy-Paste-Code, den Sie in Ihre functions.php-Datei kopieren können.

Ich habe diese Klasse gegründet.

<?php
/**
* 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();

Benutzer-Avatar
schmuli

Der beste Ausgangspunkt wäre, ein Plugin herunterzuladen und unter die Haube zu schauen, das dies bereits tut. Das Studium, welche Methoden angewendet werden können, hilft Ihnen bei Ihrer Implementierung, unabhängig davon, ob das Plugin auf dem neuesten Stand ist oder nicht.

Hier sind weitere Optionen, die Sie sich ansehen können: http://www.privacydusk.com/other-privacy/best-wordpress-plugins-to-limit-login-brute-force-attacks/

  • Ich bin mir nicht sicher, warum die Leute den Teil ohne Plugins in der Frage immer wieder verpassen.

    Benutzer1600649

    16. September 2014 um 7:06 Uhr

  • Studiere ein Plugin und lerne die “Methode”. Gibt es eine Methode, die eine Variable setzt? Dies ist etwas, das leicht gelernt werden kann, indem man sich ansieht, was es bereits gibt. Dies wird dem OP helfen, einen Weg zu finden, dies ohne ein Plugin zu implementieren.

    – Schmuli

    16. September 2014 um 7:13 Uhr

  • Das Schreiben Ihres eigenen Plugins oder die Verwendung eines anderen macht kaum einen Unterschied. Tatsächlich ist dann ein Plugin eines Drittanbieters vorzuziehen. Das Verwenden der Prinzipien, aber das Ändern einer Kerndatei wird schwierig zu warten.

    Benutzer1600649

    16. September 2014 um 7:31 Uhr

  • Das ist fraglich. Es hängt wirklich von den eigenen Programmierkenntnissen und Kenntnissen der WordPress-Plugin-Architektur ab.

    – Tobias Beuving

    8. März 2015 um 12:50 Uhr

Der Schutz dieser Art von Funktionalität erfolgt in der Tat am besten außerhalb dieser Anwendung und sogar ihrer Programmiersprache.

Das Ablehnen von Verbindungen ist typischerweise die Aufgabe einer Firewall, die auch den Webserver schützt.

Setzt man diese beiden zusammen kommt man schnell bei fail2ban oder sshguard an. Ein Hosting-Unternehmen, mit dem ich zusammenarbeite, hat genau das getan, daher weiß ich, dass dies möglich ist. Sie verwenden einen Four-Strikes und Sie sind aus der Richtlinie. Ich bin mir nicht sicher, ob ihr Code öffentlich ist, aber es sollte nicht zu schwer sein, ein Rezept zu finden, beide haben eine ausgezeichnete Dokumentation.

1142620cookie-checkWordPress: Anmeldeversuche begrenzen (ohne Plugins)

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy