답변:
현재 올바른 것으로 선택한 솔루션보다 Daniel의 훨씬 간단한 솔루션 을 강력히 권장 합니다.
$user = get_userdata( $user_id );
if ( $user === false ) {
//user id does not exist
} else {
//user id exists
}
$user_ids = array_filter( $user_ids, 'get_userdata' );
이 경우 WP_User를 반환하는 동안 get_userdata ($ user_id) 를 사용하지 않기 때문에 사용자 지정 쿼리보다 더 욕심이 많습니다.
쿼리에 대해서는 준비 메소드를 사용하는 데 동의하지만 SELECT COUNT (*) 는 모든 열을 반환한다는 것을 의미합니다 . 여기서는 쓸모가 없습니다.
대신 SELECT COUNT (ID)를 사용하는 것이 좋습니다 .이 방법으로 더 빠른 단일 열에서만 작업하고 있습니다.
returning statement의 다른 측면에서 다음과 같은 Ternary Logic을 사용하면 더 읽기 쉽습니다.
return 1 <$ count? 허위 사실;
요약하면 다음과 같이 구현했을 것입니다.
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;
}
SELECT COUNT(*)
로 SELECT COUNT(ID)
둘 다 단일 열을 반환합니다 ... 카운트.
성능이 중요한 경우 다음을 사용하십시오.
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;
}
그렇지 않으면을 사용하십시오 get_userdata($user_id) !== false
. 호출 get_userdata
은 단일 값 대신 데이터베이스에서 전체 행을 검색하고 새 WP_User 오브젝트를 작성하고 성공시이를 캐시합니다.
wpdb :: prepare ()에 대한 인수 2 누락과 같은 경고가 표시되지 않습니다.
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; }
}
return $count == 1;
적어도 몇 명의 해커가 수행 한 작업 (최소한 한 번은이 게임을 통해 희생 된 것으로 알고 있음)은이 유형의 URL을 사용하여 사이트를 방문하는 것입니다.
domain.com/?author=0
domain.com/?author=1
기타
시도가 성공적으로 이루어지면, 사이트의 출력에 유효한 데이터가 있으며, 사용자 nicename은 웹 사이트 컨텐츠에 있으며 별명도있을 수 있습니다 (페이지 출력에 따라 다름).
잘못된 시도에서 사이트는 404 페이지로 이동합니다 (또는 페이지를 찾을 수 없음 오류로 설정되어 있음).
cURL을 사용하여 비교적 짧은 시간에 author = 0에서 author = 999까지 테스트하고 사용자 이름 목록을 출력 할 수있는 스크립트를 작성하는 것은 다소 사소한 일입니다. 해커가 내 사이트 중 하나에 대해이 작업을 수행 한 다음 다른 인기있는 암호 목록을 사용하여 각 사용자에게 로그인하려고합니다.
처음 이런 일이 발생한다고 상상할 수 있듯이 누군가가 모든 사용자 이름을 쉽게 찾을 수 있다는 것은 다소 두려운 일입니다. 저에게 행운의 암호는 그날 저축되었습니다. 모두가 그렇게 운이 좋은 것은 아닙니다.
나는이 큰 이름 웹 사이트 (이 게시물에서 이름이없는 채로 있음)에 대해 이것을 테스트했으며 아직이 일을 막기 위해 아무도 할 수있는 일이 없을 것 같습니다. 개인적으로 워드 프레스가 닫히는 것이 보안 위험이라고 생각합니다.
편집 :
앞으로 (2016 년 초)이 사용자 열거 공격을 막을 수있는 메소드 / 플러그인이 있음을 알고 있습니다. 그리고 나는 이것의 보안 위험에 대한 입장을 더 바꾸었고 더 이상 WordPress가 이것을 바꿀 것이라고 생각하지 않습니다.
$user = get_userdata( $user_id ); if ( $user == false ){ //user id does not exist } else { //user id exists