web-dev-qa-db-fra.com

Désactiver en toute sécurité WP REST API

J'envisage d'améliorer la sécurité de mon site Web Wordpress et c'est ainsi que l'API WP REST est activée par défaut (depuis WP 4.4 si je ' m ne me trompe pas).

Quel est un moyen sûr de le désactiver?

Par "sûr", je veux dire ici que cela ne provoque pas d'effets secondaires inattendus, par exemple. ne rompt aucune autre fonctionnalité principale WP.

Une approche possible serait d'utiliser les règles de réécriture .htaccess, mais étonnamment, je n'ai trouvé aucune instruction «officielle» pour le faire.

Toute aide ou recommandation est grandement appréciée :)

Mise à jour: Les plugins tiers ne sont pas la solution que je recherche. Bien que je sache que beaucoup d’entre eux résolvent la tâche, ils incluent de nombreuses fonctionnalités supplémentaires qui ralentissent le site Web. J'espère qu'il existe une solution en une ligne à ce problème sans les frais généraux d'un plugin supplémentaire.

Update 2: Voici l'opinion officielle de Wordpress: https://developer.wordpress.org/rest-api/using-the-rest-api/frequently-asked-questions/#can- i-désactiver-le-reste-api

L'équipe Wordpress souhaite donc que la future fonctionnalité WP dépende de la nouvelle API REST. Cela signifie qu'il n'y a pas de moyen guarantee sûr pour désactiver l'API REST.

Espérons qu'il y ait suffisamment d'experts en sécurité qui s'occupent de WP sécurité.

Mise à jour 3:

Une solution de contournement est présentée dans le Manuel de l'API WordPress - vous pouvez Exiger une authentification pour toutes les mèches

Cela garantit que l'accès anonyme à l'API REST de votre site Web est désactivé, seules les requêtes authentifiées fonctionnent.

17
Eric Gopak

D'après la question originale de l'auteur, j'ai choisi l'option 2 issue des recommandations officielles de wordpress ( https://developer.wordpress.org/rest-api/using-the-rest-api/frequently-asked-questions/#can -i-désactiver-le-reste-api ). Il suffit donc de mettre votre fichier functions.php pour que seuls les utilisateurs connectés utilisent l’API restante:

add_filter( 'rest_authentication_errors', function( $result ) {
    if ( ! empty( $result ) ) {
        return $result;
    }
    if ( ! is_user_logged_in() ) {
        return new WP_Error( 'rest_not_logged_in', 'You are not currently logged in.', array( 'status' => 401 ) );
    }
    return $result;
});
5
Dzmitry Hubin

Désactiver l'API REST n'était pas une mauvaise idée, après tout . Cela a en fait ouvert un trou énorme dans tous les sites Web !

Dans wordpress 4.4 _ { il y avait un moyen } _

Ici, j'ai trouvé une solution possible avec .htaccess , mais doit être soigneusement testé en combinaison avec tout ce qui se trouve dans votre fichier .htaccess (par exemple, les règles de jolie url ajoutées par wordpress elle-même):

# WP REST API BLOCK JSON REQUESTS 
# Block/Forbid Requests to: /wp-json/wp/
# WP REST API REQUEST METHODS: GET, POST, PUT, PATCH, DELETE
RewriteCond %{REQUEST_METHOD} ^(GET|POST|PUT|PATCH|DELETE) [NC]
RewriteCond %{REQUEST_URI} ^.*wp-json/wp/ [NC]
RewriteRule ^(.*)$ - [F]

Une méthode très radicale consiste également à avoir une page Web 404.html à la racine, puis à ajouter cette ligne:

# WP REST API BLOCK JSON REQUESTS 
# Redirect to a 404.html (you may want to add a 404 header!) 
RewriteRule ^wp-json.*$ 404.html

Notez que, sauf si vous utilisez une page statique, c'est-à-dire non impliquée dans les fonctions wordpress, si vous souhaitez renvoyer une erreur 404 avec une page d'erreur appropriée, il s'agit d'un sujet distinct et complet, avec beaucoup de problèmes lorsque Wordpress est impliqué

10
Kuzeko

Vous pouvez le désactiver pour les requêtes autres que localhost, dans functions.php:

/**
*    Disables WordPress Rest API for external requests
*/
function restrict_rest_api_to_localhost() {
    $whitelist = array('127.0.0.1', "::1");

    if(!in_array($_SERVER['REMOTE_ADDR'], $whitelist)){
        die('REST API is disabled.');
    }
}
add_action( 'rest_api_init', 'restrict_rest_api_to_localhost', 1 );
7
Lucas Bustamante

Avec le plug-in " Désactiver REST API ", vous pouvez sélectionner les API que vous souhaitez activer, par exemple. le formulaire de contact 7 API. Voir les paramètres du plugin (yoursite.com/wp-admin/options-general.php?page=disable_rest_api_settings)

1
Benno