WordPress 4.7.1 REST API aún exponiendo a los usuarios

23

He actualizado mi WordPress a 4.7.1 , y después de eso traté de enumerar a los usuarios a través de la API REST, que debería estar arreglada, pero pude recuperar usuarios.

https://mywebsite.com/wp-json/wp/v2/users

Salida:

[{"id":1,"name":"admin","url":"","description":"","link":"https:\/\/mywebsite\/author\/admin\/","slug":"admin","avatar_urls":{"24": ...

Registro de cambios de la última versión:

  

La API REST expuso los datos de usuario de todos los usuarios que habían creado una publicación   de un tipo de publicación pública. WordPress 4.7.1 limita esto a solo tipos de publicaciones   que han especificado que deben mostrarse dentro de la API REST.   Reportado por Krogsgard y Chris Jean.

Después de instalar el complemento Disable REST API , parece que todo funciona bien, pero no me gusta usarlo para todos los complementos.

La salida después de usar el complemento es:

{"code":"rest_cannot_access","message":"Only authenticated users can access the REST API.","data":{"status":401}}

¿Cómo puedo solucionar este problema sin usar el complemento, o por qué incluso después de la actualización existe este problema?

EDITAR 30.9.2017

Me di cuenta de que hay un conflicto entre contact 7 plugin y Disable REST API y eso te dará un error 401 unauthorized .

Cuando intentes enviar un mensaje a través del formulario contact 7 , hará una solicitud

wp-json/contact-form-7/v1/contact-forms/258/feedback

y deshabilitar eso no es una buena idea.

    
pregunta mirsad 13.01.2017 - 01:45

4 respuestas

14

Use este fragmento de código para ocultar la lista de usuarios y dar como resultado 404, mientras que el resto de las llamadas de la API continuarán funcionando como estaban.

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

Puede consultar este enlace en gitHub repo de WP_REST_API para obtener más detalles sobre mismo.

    
respondido por el BlueSuiter 27.01.2017 - 19:38
1

Quita el enlace de la API del encabezado HTML si lo deseas.

// https://wordpress.stackexchange.com/a/211469/77054
// https://wordpress.stackexchange.com/a/212472
remove_action( 'wp_head', 'rest_output_link_wp_head', 10 );

Luego requiere autenticación para todas las solicitudes.

// You can require authentication for all REST API requests by adding an is_user_logged_in check to the rest_authentication_errors filter.
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', 'Only authenticated users can access the REST API.', array( 'status' => 401 ) );
    }
    return $result;
});

Esto te dejará con el mensaje deseado.

Ahora para detener la enumeración, podrías usar algo como esto.

// https://perishablepress.com/stop-user-enumeration-wordpress/
// block WP enum scans
    // https://m0n.co/enum
    if (!is_admin()) {
        // default URL format
        if (preg_match('/author=([0-9]*)/i', $_SERVER['QUERY_STRING'])) die();
        add_filter('redirect_canonical', 'shapeSpace_check_enum', 10, 2);
    }
    function shapeSpace_check_enum($redirect, $request) {
        // permalink URL format
        if (preg_match('/\?author=([0-9]*)(\/*)/i', $request)) die();
        else return $redirect;
    }

Echa un vistazo a toda la publicación para más técnicas.

    
respondido por el lowtechsun 18.06.2017 - 15:38
0

Puedes arreglarlo a través de nginx / apache config:

location ~* /wp-json/wp/v2/users {
        allow ip_address;
        deny all;
}
    
respondido por el vim 12.12.2018 - 14:37
-1

Para poder solucionar este problema, primero debe conocer la fuente del problema.

  1. ¿Utiliza complementos de SEO como: todo en un paquete de SEO o Yoast? Intenta deshabilitar esto y vuelve a comprobar.
  2. ¿Utilizas el plugin Jetpack? Intenta deshabilitar esto y vuelve a comprobar.

Por favor, avíseme si esto lo orientó en la dirección correcta.

Una forma sucia de resolver esto es simplemente bloquear la URL debajo de tus archivos .htacces. enlace

    
respondido por el Foo 24.06.2017 - 20:30

Lea otras preguntas en las etiquetas