3
votes

Restreindre les demandes d'API WordPress Rest à mon domaine

J'ai un site Web WordPress que j'utilise uniquement pour remplir les articles de blog et certains articles privés sous des types d'articles personnalisés. Sur un autre site Web, j'utilise l'API REST pour afficher les articles. Si j'utilise un logiciel comme Postman, je peux afficher les données de l'API REST.

Comment puis-je empêcher toute demande d'API REST non autorisée au domaine www.example.com? donc si la demande ne provient pas de www.monsite.com, elle est bloquée?

En gros, empêcher que mes types de messages personnalisés (example.com) soient visibles pour les autres API s'ils ne proviennent pas de mysite.com


1 commentaires

Vérifiez ceci pour l'authentification de l'API WP REST v2.wp-api.org/guide/authentication


3 Réponses :


5
votes

Vous pouvez désactiver la demande externe en ajoutant ceci dans votre wp-config.php (vous pouvez également spécifier le domaine que vous ne voulez pas bloquer comme ça).

 define( 'WP_HTTP_BLOCK_EXTERNAL', TRUE );
 define( 'WP_ACCESSIBLE_HOSTS', 'example.com, domain.com' );


1 commentaires

Pour pouvoir mettre à jour le cœur de WordPress, les plugins et les thèmes provenant de https://wordpress.org/themes/ , assurez-vous d'ajouter api.wordpress.org à WP_ACCESSIBLE_HOSTS . Si vous utilisez un thème non hébergé sur https://wordpress.org/themes/ , contactez l'auteur du thème et demandez le domaine à partir duquel les fichiers de thème sont téléchargés.



4
votes
add_filter( 'rest_authentication_errors', 'wpse150207_filter_incoming_connections' );

function wpse150207_filter_incoming_connections( $errors ){

    $allowed_ips = array( '127.0.0.1' );
    $request_server = $_SERVER['REMOTE_ADDR'];

    if( ! in_array( $request_server, $allowed_ips ) )
        return new WP_Error( 'forbidden_access', 'Access denied', array( 'status' => 403 ) );

    return $errors; 

}

0 commentaires

0
votes

Une façon de restreindre les requêtes REST est de raccorder à rest_api_init avec la priorité 1, et de mettre en liste blanche les adresses IP souhaitées. Dans cet exemple, je limite l'accès REST au serveur lui-même uniquement:

/**
*    Disables WordPress Rest API for external requests
*/
add_action('rest_api_init', function() {
    $whitelist = ['127.0.0.1', "::1"];

    if(!in_array($_SERVER['REMOTE_ADDR'], $whitelist)){
        die('REST API is disabled.');
    }
}, 1);


0 commentaires