Czy jest jakiś sposób, aby sprawdzić, czy istnieje identyfikator użytkownika? Chcę utworzyć funkcję podobną do tej, username_exists()
która zwróci się, jeśli identyfikator istnieje, czy nie.
12
Użyj tej funkcji:
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; }
}
Stosowanie:
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
Zdecydowanie poleciłbym znacznie prostsze rozwiązanie Daniela niż to, które obecnie zostało wybrane jako prawidłowe:
źródło
$user_ids = array_filter( $user_ids, 'get_userdata' );
W tym przypadku na pewno nie użyję get_userdata ($ user_id), gdy zwraca WP_User, więc jest bardziej chciwy niż zwykłe zapytanie.
Jeśli chodzi o zapytanie, zgadzam się przy użyciu metody przygotowania, ale SELECT COUNT (*) oznacza, że zwracasz wszystkie kolumny , co jest tutaj bezużyteczne.
Polecam za pomocą SELECT COUNT (ID) unstead, w ten sposób pracujemy tylko na jednej kolumnie, która będzie szybsza.
W innym aspekcie zwracanej instrukcji byłoby bardziej czytelne dzięki Ternary Logic, takim jak:
Podsumowując, zaimplementowałbym to w następujący sposób:
źródło
SELECT COUNT(*)
iSELECT COUNT(ID)
oba zwracają jedną kolumnę ... liczbę.Jeśli problemem jest wydajność, użyj:
W przeciwnym razie użyj
get_userdata($user_id) !== false
. Wywołanie toget_userdata
spowoduje pobranie całego wiersza z bazy danych zamiast pojedynczej wartości, utworzenie nowego obiektu WP_User i buforowanie go w przypadku powodzenia.źródło
Spróbuj To nie wyświetli ostrzeżenia, takiego jak Brakujący argument 2 dla wpdb :: preparat ()
źródło
return $count == 1;
Coś, co robi co najmniej kilku hakerów (wiem, bo przynajmniej raz grałem w tę ofiarę), to odwiedzić twoją stronę używając tego typu URL
itp.
Po udanej próbie dane wyjściowe witryny będą zawierały prawidłowe dane, ponadto nazwa użytkownika użytkownika będzie znajdować się w treści strony internetowej, a także może tam znajdować się pseudonim (w zależności od wyników stron).
W przypadku nieprawidłowej próby strona przejdzie na stronę 404 (lub cokolwiek innego, co ma się wydarzyć na stronie nie znaleziono błędu).
Budowanie skryptu przy użyciu cURL może być dość trywialne, które może testować od powiedzmy autor = 0 do autor = 999 w stosunkowo krótkim czasie i wyświetlać listę nazw użytkowników. Miałem hakera, który zrobił to dla jednej z moich stron, a następnie próbował zalogować się do każdego użytkownika przy użyciu innej listy popularnych haseł.
Jak możesz sobie wyobrazić, kiedy to się dzieje po raz pierwszy, trochę przerażające jest, że ktoś może dość łatwo znaleźć wszystkie twoje nazwy użytkowników. Na szczęście dla mnie silne hasła uratowały ten dzień, jestem pewien, że nie wszyscy mają tyle szczęścia.
Przetestowałem to na kilku znanych stronach internetowych (które pozostaną bezimienne w tym poście) i wydaje się, że nikt nie może jeszcze nic zrobić, aby temu zapobiec. Osobiście uważam, że wordpress powinien zamknąć ryzyko bezpieczeństwa.
EDYCJA :
Tutaj w przyszłości (początek 2016 r.) Teraz wiem, że istnieją metody / wtyczki, które mogą udaremnić atak polegający na wyliczeniu użytkowników. Ponadto zmieniłem swoje stanowisko w sprawie ryzyka związanego z bezpieczeństwem i nie sądzę, że WordPress powinien to zmienić.
źródło