개발 꿀팁/PHP

Wordpress 로그인하지 않은 사용자의 REST API 접근 금지

Jammie 2022. 8. 2. 11:32
반응형

방법 1: 로그인하지 않은 사용자의 API를 완전히 비활성화합니다

/*로그인하지 않은 사용자 사용 안 함*/
add_filter( 'rest_api_init', 'rest_only_for_authorized_users', 99 );
function rest_only_for_authorized_users($wp_rest_server){
    if ( !is_user_logged_in() ) {
        wp_die('불법 조작!!');
    }
}

방식 2: 일부 끝점을 필터링할 수 없음

add_filter( 'rest_endpoints', function( $endpoints ){
    if ( isset( $endpoints['/wp/v2/users'] ) ) {
        unset( $endpoints['/wp/v2/users'] );
    }
    if ( isset( $endpoints['/wp/v2/users/(?P<id>[\d]+)'] ) ) {
        unset( $endpoints['/wp/v2/users/(?P<id>[\d]+)'] );
    }
    return $endpoints;
});

또는

    foreach ($endpoints as $key=>$value){
        if(preg_match("/^(\/wp\/v2|\/oembed\/1.0|\/ft\/v1)/",$key)){
            unset( $endpoints[$key] );
        }
    }
//
    if ( isset( $endpoints['/'] ) ) {
        unset( $endpoints['/'] );
    }

방식 3: API에서 모든 끝점 제거

add_action(' plugins_loaded ',function(){ 
    remove_filter(' rest_api_init ',' create_initial_rest_routes '); 
});

조합사용: 일부 API, 로그인 접속 가능

add_filter( 'rest_endpoints', function( $endpoints ){

    foreach ($endpoints as $key=>$value){
        if(preg_match("/^(\/wp\/v2|\/oembed\/1.0|\/ft\/v1)/",$key) && defined(AUTH_KEY)){
            unset( $endpoints[$key] );
        }
    }
    if ( isset( $endpoints['/'] ) ) {
        unset( $endpoints['/'] );
    }
    return $endpoints;
});
반응형