Il s'agit d'une question sur la génération de jetons CSRF.Génération de jetons CSRF
Habituellement, je voudrais générer un jeton basé sur un morceau de données unique associé à la session de l'utilisateur, et haché et salé avec une clé secrète.
Ma question concerne la génération de jetons lorsqu'il n'y a PAS de données utilisateur uniques à utiliser. Aucune session n'est disponible, les cookies ne sont pas une option, l'adresse IP et les choses de cette nature ne sont pas fiables.
Y a-t-il une raison pour laquelle je ne peux pas inclure la chaîne dans le hachage dans le cadre de la requête? Exemple pseudocode pour générer le jeton et l'intégrer:
var $stringToHash = random()
var $csrfToken = hash($stringToHash + $mySecretKey)
<a href="http://foo.com?csrfToken={$csrfToken}&key={$stringToHash}">click me</a>
Exemple validation côté serveur du jeton CSRF
var $stringToHash = request.get('key')
var $isValidToken = hash($stringToHash + $mySecrtKey) == request.get('csrfToken')
La chaîne à utiliser dans la table de hachage qui serait différent à chaque demande. Tant qu'elle était incluse dans chaque requête, la validation du jeton CSRF pouvait se poursuivre. Comme il s'agit d'une nouveauté sur chaque requête et uniquement intégrée dans la page, l'accès externe au jeton ne serait pas disponible. La sécurité du jeton tombe alors sur le $ mySecretKey étant connu seulement pour moi.
Est-ce une approche naïve? Est-ce que je manque une raison pour laquelle cela ne peut pas fonctionner?
Merci
La solution proposée est vulnérable aux attaques par rejeu.Le même jeton et la même combinaison de touches fonctionneront indéfiniment. – Matthew