web-dev-qa-db-fra.com

WP REST API - Nonce transmet wp_verify_nonce même après la déconnexion

Je crée une application avec une seule page avec WP REST API et AngularJS. Après avoir résolu un problème avec les nonces sur cette question , je suis maintenant confronté à autre chose. Pour tester la possibilité d'ajouter des champs et de les protéger contre les utilisateurs non connectés, j'ai essayé de créer un champ personnalisé qui expose le résultat de wp_verify_nonce

if (isset($_SERVER['HTTP_X_WP_NONCE'])) {
    $nonce = $_SERVER['HTTP_X_WP_NONCE'];
    $nonce_verified = wp_verify_nonce($_SERVER['HTTP_X_WP_NONCE'], 'wp_rest');
}

return array('nonce' => $nonce,
             'nonce_verified' => $nonce_verified);

Bien sûr, ceci est un test et le restera. Nonce est exposé, de même que nonce_verified. À ce stade, j'ai essayé de connecter/déconnecter un utilisateur et de demander ce point de terminaison et les utilisateurs/moi. Mais il est arrivé que mon nonce soit toujours vérifié, avec un utilisateur connecté ou déconnecté. Le nonce lui-même change en même temps. cependant, une fois déconnecté, il est identique pour toute sa durée de vie.

Pour créer mon nonce, j'ai utilisé un code localisé comme dans ma question précédente:

wp_localize_script('angularjs', 'params', array(
    'nonce' => wp_create_nonce('wp_rest'),
));

qui est passé par javascript, comme je l'ai vu dans un tutoriel sur AngularJS. Bien que ce nonce soit validé, une requête sur users/me conduit à un 403 lorsqu'elle n'est pas journalisée, comme prévu.

Ma théorie est qu'un nonce est créé pour les utilisateurs non connectés, il y a donc toujours un nonce valide disponible. Devrais-je protéger la création de nonce avec is_user_logged_in()? Ou devrais-je accrocher la création de nonce quelque part? Je vous remercie.

1
Daniele Squalo

La vraie raison de ne pas utiliser les nonces pour les utilisateurs non connectés est que cela les charge considérablement, car ils ont besoin d'actualiser la page lorsque le nonce expire, et la seule façon pour eux de savoir qu'ils doivent le faire est quand quelque chose ne fonctionne pas.

Il n'y a probablement aucune raison d'éviter de le générer, mais si vous vous attendez à ce que votre "application" soit utilisée/ouverte pendant plus de 12 heures (le "temps" utilisé pour calculer les wordpress nonces), vous devez également disposer un moyen automatique d'actualiser le nonce (peut-être une bonne idée pour les utilisateurs connectés également) ou d'éviter de l'utiliser en premier lieu.

0
Mark Kaplun

Les nonces WordPress ne sont pas de vrais nonces, ils restent valables pour une période de 12 à 24 heures et renverront leMÊMEvaleur pour tous les visiteurs (utilisateurs non connectés) du site . Vous ne devez donc PAS compter sur WP nces pour les mesures de sécurité si vous attendez un nouveau numéro pour chaque action ou si vous travaillez avec des utilisateurs invités dans votre application.

J'explique en détail comment cela fonctionne ici: https://www.bynicolas.com/code/wordpress-nonce/

Vous pouvez également consulter ce projet https://github.com/calevans/wp-simple-nonce si vous souhaitez ajouter de véritables nonces à votre projet

EDITdu codex https://codex.wordpress.org/WordPress_Nonces

Il ne faut jamais compter sur les nonces pour l'authentification ou l'autorisation et le contrôle d'accès.

0
bynicolas