WordPress REST API – stäng av det om du inte använder det

· 3 min lästid · WordPress Säkerhet
WordPress REST API – stäng av det om du inte använder det

WordPress REST API är påslaget på varje WordPress-installation sedan version 4.7. De flesta som kör en vanlig företagswebb vet knappt att det finns — men det exponerar ändå information om din installation mot omvärlden.

Det är inte katastrofalt i sig. Men det är en attackyta du förmodligen inte behöver.

Vad REST API faktiskt gör

REST API låter externa applikationer kommunicera med din WordPress-installation via HTTP-anrop. Det används av Gutenberg-redigeraren, WooCommerce, mobilappar och headless-setup:ar.

Om du driver en vanlig WordPress-webb med klassisk redigering, inga mobilappar och inget headless — används det troligtvis bara av Gutenberg internt. Resten av exponeringen är i princip gratis för den som vill sondera din installation.

Vad som läcker utan att du vet om det

Med standard REST API-konfiguration kan vem som helst hämta en lista på alla dina användare via:

https://dinwebb.se/wp-json/wp/v2/users

Det returnerar användarnamn, ID och ibland mer. Det är precis den informationen som används vid brute force-attacker mot inloggningen.

Det går också att lista publicerade inlägg, kategorier och en del systeminformation — utan inloggning.

Två separata problem

Det är viktigt att skilja på:

1. Användaruppräkning — att /wp-json/wp/v2/users returnerar dina användare. Det är den allvarligaste delen och bör stängas av oavsett om du behöver REST API eller inte.

2. Hela REST API:et — om du kör Gutenberg eller WooCommerce kan du inte stänga av allt. Men du kan begränsa vad oinloggade användare ser.

Stäng av användaruppräkning — alltid

Lägg det här i din functions.php eller i ett litet målfunktions-plugin:

add_filter( 'rest_endpoints', function( $endpoints ) {
    if ( ! is_user_logged_in() ) {
        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;
} );

Det här tar bort användarendpointen för alla som inte är inloggade. Gutenberg och autentiserade anrop påverkas inte.

Begränsa hela REST API för oinloggade

Om du inte kör WooCommerce, mobilappar eller liknande kan du gå längre och neka REST API-anrop från ej autentiserade användare:

add_filter( 'rest_authentication_errors', function( $result ) {
    if ( ! is_user_logged_in() ) {
        return new WP_Error(
            'rest_not_logged_in',
            'REST API är begränsat till inloggade användare.',
            array( 'status' => 401 )
        );
    }
    return $result;
} );

OBS: Det här bryter Gutenberg om du kör det som redigerare. Testa alltid på en staging-miljö innan du lägger det i produktion. Kör du klassisk editor och ingen e-handel — fungerar det utmärkt.

Plugins som löser det åt dig

Vill du inte skriva kod finns det plugins för det här. Disable REST API är ett välkänt alternativ med drygt 90 000 aktiva installationer. Det låter dig begränsa åtkomst per användarroll utan att röra kod.

Om du väljer plugin-vägen: kontrollera senaste uppdateringsdatum och hur många aktiva installationer det har. Ett övergett plugin för att stänga säkerhetsluckor är ironisk nog en säkerhetsrisk i sig. Mer om hur du väljer tillägg med omdöme finns på WordPress-säkerhetssidan.

Hur vet du om du berörs?

Öppna en privat flik i webbläsaren och besök:

https://dinwebb.se/wp-json/wp/v2/users

Om du ser JSON med namn och ID:n — är du exponerad. Om du får ett 401-fel eller ett tomt svar — är du redan skyddad.

Det tar 30 sekunder att kolla. Gör det nu.


Sitter du hellre med annat än att hålla koll på den här typen av detaljer? Vi sköter det löpande åt ett 50-tal WordPress-kunder — se vad som ingår i ett supportavtal.

Hur mår din webb?

Kör ett gratis test och se hur din webb presterar inom SEO, säkerhet, prestanda och tillgänglighet, på under en minut.

Testa gratis

Inget konto krävs

Få fler tips som dessa

Prenumerera på vårt nyhetsbrev, vi delar tips om webbunderhåll, säkerhet och prestanda.