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
3 Réponses :
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' );
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.
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; }
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);
Vérifiez ceci pour l'authentification de l'API WP REST v2.wp-api.org/guide/authentication a>