WordPress 4.7.1 API REST expose toujours les utilisateurs

23

J'ai mis à niveau mon WordPress vers 4.7.1 , puis j'ai essayé d'énumérer les utilisateurs via l'API REST, qui devrait être corrigée, mais j'ai pu récupérer des utilisateurs.

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

Sortie:

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

Changelog de la dernière version:

  

Les données utilisateur exposées de l'API REST pour tous les utilisateurs ayant créé un message   d'un type de message public. WordPress 4.7.1 limite ceci aux types de publication   qui ont spécifié qu'ils doivent être affichés dans l'API REST.   Rapporté par Krogsgard et Chris Jean.

Après avoir installé le plugin Disable REST API , il semble que tout fonctionne bien, mais je n'aime pas utiliser chaque plugin.

La sortie après utilisation du plugin est:

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

Comment puis-je résoudre ce problème sans utiliser de plug-in, ou pourquoi, même après la mise à niveau, il existe toujours?

EDIT 30.9.2017

J'ai réalisé qu'il y avait un conflit entre contact 7 plugin et Disable REST API et que cela vous donnerait 401 unauthorized error.

Lorsque vous essayez d'envoyer un message par le biais de contact 7 form, il fera une demande

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

et désactiver ce n’est pas une bonne idée.

    
posée mirsad 13.01.2017 - 01:45

4 réponses

14

Utilisez cet extrait de code, il masquera la liste des utilisateurs et donnera 404 comme résultat, tandis que les appels restants de l'API continueront de fonctionner comme ils étaient auparavant.

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;
});

Vous pouvez consulter le lien du compte gitHub de WP_REST_API pour obtenir plus de détails sur même.

    
réponse donnée BlueSuiter 27.01.2017 - 19:38
1

Supprimez le lien API de l'en-tête HTML si vous le souhaitez.

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

Requiert ensuite une authentification pour toutes les demandes.

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

Cela vous laissera le message souhaité.

Maintenant, pour arrêter l'énumération, vous pouvez utiliser quelque chose comme ceci.

// 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;
    }

Découvrez l'intégralité du message pour connaître d'autres techniques.

    
réponse donnée lowtechsun 18.06.2017 - 15:38
0

Vous pouvez y remédier via la configuration nginx / apache:

location ~* /wp-json/wp/v2/users {
        allow ip_address;
        deny all;
}
    
réponse donnée vim 12.12.2018 - 14:37
-1

Pour résoudre ce problème, vous devez d’abord connaître la source du problème.

  1. Utilisez-vous des plugins SEO comme: Pack SEO ou Yoast? Essayez de désactiver cela et vérifiez à nouveau.
  2. Utilisez-vous le plugin Jetpack? Essayez de désactiver cela et vérifiez à nouveau.

S'il vous plaît laissez-moi savoir si cela vous a orienté dans la bonne direction.

Une mauvaise façon de résoudre ce problème consiste à bloquer l'URL située en dessous de votre fichier .htacces. enlace

    
réponse donnée Foo 24.06.2017 - 20:30

Lire d'autres questions sur les étiquettes