阻止 CSRF 请求 -- SameSite 不起作用



我正在使用在tomcat 7.0.77上运行的struts2框架。 在公共过滤器中,我添加了带有以下代码的SameSite cookie:

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

我正在使用最新版本的Chrome(版本60.0.3112.90(官方内部版本((64位((来测试它是否可以避免CSRF。

假设要保护的服务器是 192.168.1.100。另一台服务器运行在 192.168.1.101 上,测试非常简单.html:

<!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>

因此,我打开Chrome选项卡并登录了192.168.1.100。

然后我打开另一个 Chrome 标签页以访问 https://192.168.1.101/test.html 和 点击"点击我!

我所期待的是,当我点击这个"点击我!"时,链接会将我重定向到 https://192.168.1.100/home.html 但不应该传递cookie。所以我需要再次登录。

但实际事实是我仍然处于登录状态,并且所有 cookie 都已传递,我可以从 Chrome 开发人员工具中看到。

真的很困惑我错在哪里,谢谢你的帮助!

终于花了一整天的时间弄清楚了。 我们需要将SameSite理解为一个选项而不是一个键。

所以我们需要像这样设置一个cookie:

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

最新更新