Jak i dlaczego warto zablokować WP REST API?

Interfejs do pobierania informacji z WP REST API dostępny pod adresem: twojastrona.pl/wp-json/wp/
Przykładowo listę użytkowników można sprawdzić pod adresem: /wp-json/wp/v2/users

Od wersji 4.7 WordPress domyślnie włącza obsługę REST API.

Co zrobić, żeby wyłączyć dostęp?

// Filters for WP-API version 1.x
add_filter( 'json_enabled', '__return_false' );
add_filter( 'json_jsonp_enabled', '__return_false' );

// Filters for WP-API version 2.x
add_filter( 'rest_enabled', '__return_false' );
add_filter( 'rest_jsonp_enabled', '__return_false' );

// Remove REST API info from head and headers
remove_action( 'xmlrpc_rsd_apis', 'rest_output_rsd' );
remove_action( 'wp_head', 'rest_output_link_wp_head', 10 );
remove_action( 'template_redirect', 'rest_output_link_header', 11 );
Aby udostępnić usługę tylko zalogowanym użytkownikom:

function 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.', '...' ),
array( 'status' => rest_authorization_required_code() )
);
}

return $access;
}
add_filter( 'rest_authentication_errors', 'allow_logged_in_rest_access' );
Aby zablokować w .htaccess

RewriteCond %{REQUEST_METHOD} ^(GET|POST|PUT|PATCH|DELETE) [NC]
RewriteCond %{REQUEST_URI} ^.*wp-json/wp/ [NC]
RewriteRule ^(.*)$ - [F]

You Might Also Like

Leave a Reply