Ako zakázať WordPress REST API

WordPress
Martin Saxa - 3. apríla 2024

WordPress REST API sa je rozhranie pre posielanie dát vo formáte JSON. Je to základny kameň Gutenberg Editoru, avšak okrem toho sa slúži aj pre iné pluginy alebo mobilné aplikácie.

Avšak dáta sú v základnej inštalácií WordPressu voľne dostupné. Stačí ísť na URL domena.sk/wp-json. Pristúp k týmto dátam nie je sám o sebe nebezpečným, avšak vďaka ním vedia zistiť, aké pluginy sú použité na webe alebo získať rovno obsah našich (verejných) článkov.

Príklad dát z tejto stránky

Pre formátovanie dát odporúčam doplnok JSONVue alebo použiť prehliadač Firefox.

„Vypnutie“ REST API

Nakoľko jadro WordPressu využíva REST API pre Gutenberg editor, alebo ho potrebujú iné pluginy, nie je ODPORUČANÉ ho vypnúť. Avšak tvorcovia WordPressu ho odporúčajú vypnúť pre neprihlásených používateľov. Taktiež ponúkajú aj snippet nižšie.

add_filter( 'rest_authentication_errors', function( $result ) {
    // Ak už bola "vyhodená" chyba s authentifikáciou 
    // posunieme ju ďalej
    if ( true === $result || is_wp_error( $result ) ) {
        return $result;
    }

    // Vrátime chybu ak používateľ nie je prihlásený
    if ( ! is_user_logged_in() ) {
        return new WP_Error(
            'rest_not_logged_in',
            __( 'You are not currently logged in.' ),
            array( 'status' => 401 )
        );
    }

    // Naša kontrola nemá žiaden efekt pre prihlásených používateľov
    return $result;
});

Snippet odporúčam vložiť do child témy, alebo vložiť pomocou pluginu pre snippety.

Následne REST API odpoveď vyzerá takto pre neprihlásených používateľov:

Týmto sme jednoducho zabránili použitiu REST API pre neprihlásených používateľov. Avšak, všetci prihlásení používatelia majú prístup k REST API, čo je nevýhoda napríklad pri WooCommerce riešeniach – kde zákazníci majú rolu Customer. Avšak na to sa už tento návod nezameriava.