2017-08-03 1 views
0

J'utilise struts2 framework s'exécutant sur tomcat 7.0.77. Dans le filtre commun, j'ai ajouté biscuit SameSite avec le code ci-dessous:Prévenir la requête CSRF - SameSite ne fonctionne pas

Cookie cookie = new Cookie("SameSite", "strict"); 
    cookie.setMaxAge(-1); 
    res.addCookie(cookie); 

J'utilise dernière version de Chrome (version 60.0.3112.90 (Build officiel) (64 bits)) pour tester si peut éviter CSRF.

Supposons que le serveur à protéger est 192.168.1.100. Et l'autre serveur est en cours d'exécution sur 192.168.1.101, avec un test.html très simple:

<!DOCTYPE html> 
<html lang="en"> 
<head> 
    <meta charset="UTF-8"> 
    <meta name="viewport" content="width= 
    , initial-scale=1.0"> 
    <meta http-equiv="X-UA-Compatible" content="ie=edge"> 
    <title>Document</title> 
</head> 
<body> 
    <a href="https://192.168.1.100/home.html">Click me!</a> 
</body> 
</html> 

Donc, ouvrir un onglet Chrome et connecté 192.168.1.100.

Puis j'ouvre un autre onglet Chrome pour accéder à https://192.168.1.101/test.html et cliquez sur "Click me!". Ce que je m'attends à ce que je m'attends à ce que lorsque je clique sur ce "Click me!", Le lien me redirige vers https://192.168.1.100/home.html mais les cookies ne devraient pas être passés. J'ai donc besoin de me connecter à nouveau.

mais le fait est que je suis toujours dans l'état connecté et tous les cookies sont passés que je peux voir à partir des outils de développement Chrome.

Vraiment confus là où je me trompe, appréciez votre aide!

Répondre

0

Enfin passé une journée entière pour le comprendre. Nous devons comprendre SameSite en tant qu'option au lieu d'une clé.

Nous avons donc besoin de définir un cookie comme celui-ci:

Cookie cookie = new Cookie("SomeKey", "SomeValue; SameSite=strict"); 
cookie.setMaxAge(-1); 
res.addCookie(cookie);