CSRF: Générer un jeton pour chaque demande

Droit maintenant, nous avons jeton csrf par session. Et l'ajout de ce jeton jsp à l'aide du champ caché. l'extrait de code suivant ne donne qu'un seul par session:

token = (String) session.getAttribute(CSRF_TOKEN_FOR_SESSION_NAME);
    if (null==token) {
        token = UUID.randomUUID().toString();
        session.setAttribute(CSRF_TOKEN_FOR_SESSION_NAME, token);
    }

et pour chaque demande,

//calls the above snippet and this time token will not be null 
String st = CSRFTokenManager.getTokenForSession(request.getSession());
String rt = CSRFTokenManager.getTokenFromRequest(request);

ici, l'usage est égal à comparer les chaînes et retourner true ou false.

ma question est, qu'advient-il si j'essaie de générer le jeton pour chaque demande sans obtenir le jeton de session. Et tout en comparant, je vais obtenir à partir de la session et de la demande. est-ce une bonne idée ou manque quelque chose?

Au lieu d'utiliser le ci-dessus des extraits, je vais aller avec

    //for every request generate a new and set in session
    token = UUID.randomUUID().toString();
    session.setAttribute(CSRF_TOKEN_FOR_SESSION_NAME, token);

    //get the token from session and request and compare
    String st = (String) request.getSession().getAttribute("CSRF_TOKEN_FOR_SESSION_NAME");
    String rt = CSRFTokenManager.getTokenFromRequest(request);
Vous pouvez générer un jeton et ne pas les stocker dans la session. Ajouter un champ caché dans le formulaire et un cookie. Lorsque vous recevez la demande, comparez les valeurs du champ et le cookie.
pas sûr..mais, je pense que les cookies sont vulnérables à une attaque CSRF
user1609085 L'idée de le jeton CSRF est qu'un attaquant tente d'envoyer des "caché" demande d'usurper l'identité d'un autre utilisateur A. L'attaquant utilise un autre site où il pourrait injecter une partie de code javascript malveillant, l'important ici est qu'à partir de ce site, il ne peut pas envoyer le jeton dans le cookie ou dans un en-tête spécial (les navigateurs ne laissez pas l'attaquant le faire), c'est pourquoi le jeton est généralement de là.

OriginalL'auteur | 2013-05-01