Czarna dziura. Czyli rest api a WordPress

W tym bardzo krótkim wpisie przedstawimy sposób na ukrycie domyślnie publicznie dostępnych endpointów w Wordpressie przed wścibskimi, niezalogowanymi użytkownikami.

Aby pozwolić wyłącznie zalogowanym użytkownikom podejrzeć endpointy generowane przez WP, należy dodać poniższy kod:

function mytheme_only_allow_logged_in_rest_access( $access ) {
   if( ! is_user_logged_in() ) { 
       return new WP_Error(
          'rest_cannot_access',
          __( 'Only authenticated users can access the REST API.', 'disable-json-api' ),
          array('status' => rest_authorization_required_code())
        );
   }
   return $access;
}
add_filter( 'rest_authentication_errors', 'mytheme_only_allow_logged_in_rest_access' );

Wersja z dostępem dla administratorów

function mytheme_only_allow_logged_in_rest_access( $access ) {
   if( ! is_user_logged_in() || ! current_user_can( 'manage_options' ) ) {
      return new WP_Error( 'rest_cannot_access', __( 'Only authenticated users can access the REST API.', 'disable-json-api' ), array( 'status' => rest_authorization_required_code() ) );
   }
   return $access;
}
add_filter( 'rest_authentication_errors', 'mytheme_only_allow_logged_in_rest_access' );

List domyślnych endpointów

add_filter( 'rest_endpoints', 'show_default_endpoints' );
function show_default_endpoints( $endpoints ) {
   var_export( array_keys( $endpoints ) );
   die;
}

Usuwanie tylko domyślnych endpointów

add_filter( 'rest_endpoints', 'remove_default_endpoints' );
function remove_default_endpoints( $endpoints ) {
   return array( );
}

Udostępnij

Zarezerwuj spotkanie icon Zarezerwuj spotkanie