Gibt es eine Möglichkeit zu überprüfen, ob eine Benutzer-ID vorhanden ist? Ich möchte eine ähnliche Funktion erstellen, die username_exists()
jedoch zurückgibt, ob die ID vorhanden ist oder nicht.
12
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; }
}
Verwendung:
if(user_id_exists(1)){
//it does exists
} else {
//it doesn't
}
$user = get_userdata( $user_id ); if ( $user == false ){ //user id does not exist } else { //user id exists
Ich würde Daniels viel einfachere Lösung wärmstens empfehlen als die derzeit als richtig ausgewählte:
quelle
$user_ids = array_filter( $user_ids, 'get_userdata' );
In diesem Fall werde ich get_userdata ($ user_id) definitiv nicht verwenden, während es einen WP_User zurückgibt, daher ist es gieriger 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 ist.
Ein anderer Aspekt für die zurückgebende Anweisung wäre mit einer ternären Logik wie: besser lesbar.
Zusammenfassend hätte ich es wie folgt implementiert:
quelle
SELECT COUNT(*)
undSELECT COUNT(ID)
beide geben eine einzelne Spalte zurück ... eine Zählung.Wenn die Leistung ein Problem darstellt, verwenden Sie:
Andernfalls verwenden Sie
get_userdata($user_id) !== false
. Der Aufruf vonget_userdata
ruft anstelle eines einzelnen Werts eine ganze Zeile aus der Datenbank ab, erstellt ein neues WP_User-Objekt und speichert es bei Erfolg zwischen.quelle
Versuchen Sie Dies zeigt Ihnen nicht die Warnung wie Fehlendes Argument 2 für wpdb :: prepare ()
quelle
return $count == 1;
Etwas, das von mindestens ein paar Hackern getan wird (ich weiß, weil ich mindestens einmal Opfer davon geworden bin), ist, Ihre Website unter Verwendung dieser Art von URL zu besuchen
etc.
Bei einem erfolgreichen Versuch enthält die Ausgabe der Website gültige Daten. Außerdem befindet sich der Benutzername im Inhalt der Website und möglicherweise auch der Spitzname (abhängig von der Ausgabe der Seite).
Bei einem ungültigen Versuch wechselt die Site zur 404-Seite (oder was auch immer auf einer Seite passiert ist, die nicht gefunden wurde).
Es kann ziemlich trivial sein, ein Skript mit cURL zu erstellen, das in relativ kurzer Zeit von beispielsweise author = 0 bis author = 999 testen und eine Liste von Benutzernamen ausgeben kann. Ich ließ dies von einem Hacker für eine meiner Websites ausführen und versuchte dann, mich bei jedem Benutzer mit einer anderen Liste beliebter Kennwörter anzumelden.
Wie Sie sich vorstellen können, ist es ein bisschen beängstigend zu sehen, dass jemand ganz einfach alle Ihre Benutzernamen herausfinden kann. Zum Glück haben mir starke Passwörter den Tag gerettet, ich bin sicher, nicht jeder hat so viel Glück.
Ich habe dies gegen ein paar bekannte Websites getestet (die in diesem Beitrag namenlos bleiben werden), und es scheint, dass noch niemand etwas tun kann, um dies zu verhindern. Ich persönlich denke, es ist ein Sicherheitsrisiko, dass WordPress geschlossen wird.
EDIT :
Hier in der Zukunft (Anfang 2016) weiß ich jetzt, dass es Methoden / Plugins gibt, die diesen Angriff auf die Benutzeraufzählung vereiteln können. Und ich habe meine Haltung zum Sicherheitsrisiko weiter geändert und ich denke nicht mehr, dass WordPress dies ändern sollte.
quelle