it-swarm.com.de

So prüfen Sie, ob ein Benutzer mit einer bestimmten ID existiert

Gibt es eine Möglichkeit zu überprüfen, ob eine Benutzer-ID vorhanden ist? Ich möchte eine ähnliche Funktion wie username_exists() erstellen, die jedoch zurückgibt, ob die ID vorhanden ist oder nicht.

10
Frankolin

Verwenden Sie diese Funktion:

function user_id_exists($user){

    global $wpdb;

    $count = $wpdb->get_var($wpdb->prepare("SELECT COUNT(*) FROM $wpdb->users WHERE ID = %d", $user));

    if($count == 1){ return true; }else{ return false; }

}

Verwendungszweck:

if(user_id_exists(1)){ 
    //it does exists
} else {
    //it doesn't
}
1
Daniel Patilea

Ich würde empfehlen Daniels viel einfachere Lösung über die aktuell als richtig ausgewählte:

$user = get_userdata( $user_id );
if ( $user === false ) {
    //user id does not exist
} else {
    //user id exists
}
28
Jani Uusitalo

In diesem Fall werde ich auf keinen Fall get_userdata ($ user_id) verwenden, während es einen WP_User zurückgibt, daher ist es mehr gierig als nur eine benutzerdefinierte Abfrage.

In Bezug auf die Abfrage stimme ich der Verwendung der Vorbereitungsmethode zu, aber SELECT COUNT (*) bedeutet, dass Sie alle Spalten zurückgeben, was hier unbrauchbar ist.

Ich würde empfehlen, SELECT COUNT (ID) unstead zu verwenden. Auf diese Weise arbeiten wir nur an einer einzelnen Spalte, die schneller sein wird.

Bei einem anderen Aspekt der return-Anweisung wäre dies mit einer ternären Logik besser lesbar:

return 1 <$ count? wahr falsch;

Zusammenfassend hätte ich es so implementiert:

function user_id_exists( $user_id ) {
    global $wpdb;
    $count = $wpdb->get_var( $wpdb->prepare( "SELECT COUNT(ID) FROM $wpdb->users WHERE ID = %d", $user_id ) );
    return empty( $count ) || 1 > $count ? false : true;
}
5
Maxime Culea

Wenn die Leistung ein Problem darstellt, verwenden Sie:

function user_id_exists($user_id) {
    global $wpdb;

    // Check cache:
    if (wp_cache_get($user_id, 'users')) return true;

    // Check database:
    if ($wpdb->get_var($wpdb->prepare("SELECT EXISTS (SELECT 1 FROM $wpdb->users WHERE ID = %d)", $user_id))) return true;

    return false;
}

Verwenden Sie andernfalls get_userdata($user_id) !== false. Durch den Aufruf von get_userdata wird anstelle eines einzelnen Werts eine ganze Zeile aus der Datenbank abgerufen, ein neues WP_User-Objekt erstellt und bei Erfolg zwischengespeichert.

2
le_m

Versuchen Sie Folgendes wird nicht angezeigt: Fehlendes Argument 2 für wpdb :: prepare ()

function user_id_exists($user_id){
    global $wpdb;
    $count = $wpdb->get_var($wpdb->prepare("SELECT COUNT(*) FROM $wpdb->users WHERE ID = %d",$user_id));
    if($count == 1){ return true; }else{ return false; }
}
0
Anand

Etwas, das von mindestens ein paar Hackern getan wird (ich weiß, weil ich mindestens einmal Opfer davon geworden bin), ist, Ihre Site unter Verwendung dieser Art von URL zu besuchen

domain.com/?author=0

domain.com/?author=1

usw.

Bei einem erfolgreichen Versuch weist die Ausgabe der Site gültige Daten auf. Außerdem befindet sich der Benutzername im Inhalt der Website und möglicherweise auch der Spitzname (abhängig von der ausgegebenen Seite).

Bei einem ungültigen Versuch wechselt die Site zur 404-Seite (oder was auch immer auf einem nicht gefundenen Seitenfehler geschehen soll).

Es kann ziemlich trivial sein, ein Skript mit cURL zu erstellen, das in relativ kurzer Zeit von author = 0 bis author = 999 testen und eine Liste von Benutzernamen ausgeben kann. Ich habe dies von einem Hacker für eine meiner Websites ausführen lassen und dann versucht, mich bei jedem Benutzer mithilfe einer anderen Liste gängiger Kennwörter anzumelden.

Wie Sie sich vorstellen können, ist es ein bisschen beängstigend zu sehen, dass jemand ganz einfach all Ihre Benutzernamen herausfinden kann. Glücklicherweise haben mir damals starke Passwörter erspart, aber ich bin mir sicher, dass nicht jeder so viel Glück hat.

Ich habe dies an einigen bekannten Websites getestet (die in diesem Beitrag namenlos bleiben werden), und es scheint, als könne noch niemand etwas tun, um dies zu verhindern. Ich persönlich halte es für ein Sicherheitsrisiko, dass WordPress geschlossen wird.

EDIT:

Hier in der Zukunft (Anfang 2016) weiß ich jetzt, dass es Methoden/Plugins gibt, die diesen Benutzeraufzählungsangriff vereiteln können. Und ich habe meine Haltung bezüglich des Sicherheitsrisikos geändert, und ich denke nicht mehr, dass WordPress dies ändern sollte.

0
KnightHawk