web-dev-qa-db-fra.com

Traitement des nonces expirés

J'ai une page avec quelques boutons. Lorsque les utilisateurs cliquent sur les boutons, ils émettent des requêtes AJAX et mettent à jour diverses parties de la page. Les requêtes AJAX utilisent des ressources pour des raisons de sécurité.

J'ai remarqué que si quelqu'un laissait la page ouverte plus longtemps que le temps nécessaire à l'expiration d'un nonce, les demandes AJAX cesseraient de fonctionner comme prévu. Cependant, je voudrais un comportement un peu plus robuste.

Ce que je voudrais faire, c'est détecter le moment où un nonce a expiré/échoué, puis générer à ce stade un nouveau nonce.

C'est donc une question en deux parties:

  1. Comment puis-je détecter que le nonce a expiré?
  2. La meilleure chose à faire à la non expiration est-elle d’actualiser une page ou d’autre chose? Je ne suis pas très versé dans les considérations de sécurité. Je souhaiterais toutefois conserver l’état actuel de la page (ainsi que l’une des options sélectionnées dans les différentes parties demandant une adresse Ajax) après l’actualisation de la page.
1
CHP

Les nonces ne sont pas une solution miracle: en les appliquant simplement partout où votre site devient plus sécurisé. En termes généraux, le nonce ne devrait être appliqué qu'aux utilisateurs connectés et n'a aucune utilité lorsqu'il est appliqué à des utilisateurs non connectés. Même pour les utilisateurs connectés, il peut arriver que des nonces ne soient tout simplement pas nécessaires (comme lors de la lecture d'informations accessibles au public).

.... mais lors du codage, il est vraiment plus facile d’appliquer des nonces partout au lieu d’avoir des vérifications répétitives si un utilisateur est connecté. Néanmoins, s’il est important pour vous qu’une page puisse rester ouverte plus d’un jour tout en conservant sa pertinence toutes ses fonctionnalités, c’est la voie à suivre - supprimer les nonces où ils ne sont pas nécessaires.

Le problème de nonce que vous décrivez est le résultat du fait que WordPress n’implémente pas nonce comme le suggère la définition. Les nonces sont supposés être uniques par chargement de page, tandis que WordPress les réutilise pendant 24 heures. Cela présente un énorme avantage en termes de performances et d’architecture, car il supprime la nécessité de les stocker quelque part, mais entraîne des problèmes tels que celui que vous décrivez qui sont difficiles à éliminer sans recourir à un rechargement "forcé" de la page toutes les 24 heures. Par conséquent, l’autre solution à votre problème consiste à remplacer l’API de nonce par votre propre logique afin de générer un nonce unique, ou à utiliser un intervalle de temps différent pour les utilisateurs non connectés.

Pourquoi ne pas détecter l'expiration d'une manière ou d'une autre dans JS? parce que les nonce sont générés à l’aide de clés secrètes "SALT", et que le seul moyen de reconstruire le calcul consiste à les exposer dans votre JS. À ce stade, ils ne seront plus secrets.

0
Mark Kaplun