Restringir las solicitudes de API Rest de WordPress a mi dominio

2 minutos de lectura

avatar de usuario
Hombre de la lluvia

Tengo un sitio web de WordPress que uso solo para completar publicaciones de blog y algunas publicaciones privadas en tipos de publicaciones personalizadas. En otro sitio web, estoy usando la API REST para mostrar las publicaciones. Si uso un software como Postman, puedo mostrar datos de la API REST.

¿Cómo puedo evitar solicitudes de API REST no autorizadas al dominio www.example.com? Entonces, si la solicitud no proviene de www.mysite.com, ¿está bloqueada?

Básicamente, evita que mis tipos de publicaciones personalizadas (example.com) sean visibles para el resto de la API si no proviene de mysite.com

avatar de usuario
Jígaro

Puede deshabilitar la solicitud externa agregando esto en su wp-config.php (Además, puede especificar el dominio que no desea bloquear de esta manera).

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

  • Para poder actualizar el núcleo de WordPress, los complementos y los temas que son de https://wordpress.org/themes/ asegúrese de agregar api.wordpress.org a WP_ACCESSIBLE_HOSTS. Si usas un tema no alojado en https://wordpress.org/themes/ póngase en contacto con el autor del tema y pregunte por el dominio desde donde se descargan los archivos del tema.

    – lowtechsun

    18 de julio de 2019 a las 13:08


apply_filters( 'rest_authentication_errors', WP_Error|null|bool )

Filtra los errores de autenticación REST. Coloque el código en functions.php en su directorio de temas.

Descripción completa: https://developer.wordpress.org/reference/hooks/rest_authentication_errors/

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; 

}

avatar de usuario
lucas bustamante

Una forma de restringir las solicitudes REST es enganchar en rest_api_init con prioridad 1, e incluye en la lista blanca las IP que desees. En este ejemplo, restrinjo el acceso REST solo al servidor:

/**
*    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);

  • esta acción no parece funcionar en mi instalación de wp: la coloqué en el archivo function.php del tema pero no tuvo efectos

    – johnnyontheweb

    13 de mayo a las 12:15

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad