如果我使用 Jetty 托管 war 文件,如何将 SameSite=Lax 或 SameSite=Strict 标志添加到 Jetty 生成的会话 cookie 中?
从 Jetty 9.4.23 开始,您可以在 Web 应用程序的 web.xml 文件中为 Jetty 设置的 JSESSIONID cookie 指定所需的 SameSite 值,如下所示:
<session-config>
<cookie-config>
<comment>__SAME_SITE_STRICT__</comment>
</cookie-config>
</session-config>
其他可能的值是
__SAME_SITE_LAX__
和 __SAME_SITE_NONE__
。
有关详细信息,请参阅 Jetty 中的问题 #4247。
SAME_SITE_LAX
在我的 web.xml 中 当我在 web.xml 中添加此行时,samesite 属性值未设置为 lax我的码头版本12
攻击场景
攻击者将根据目标用户的兴趣创建一个有吸引力的网站,例如,我们称之为http://www.trustmedude.com。例如,提供实时板球比分的网站甚至色情网站。在该应用程序中,他可以嵌入 ajax 请求来调用 url
其中258946257412是攻击者的账号。现在,如果合法用户登录到银行的原始网站,那么攻击者将通过某种方式强制用户浏览其网站https://www.testbankapp.com/transfer?amt=1000&toAccNo=258946257412&fromAccNo=954781203584&mode=imps
http://www.trustmedude.com,例如通过在聊天中发送网址。当用户点击网站时,网站中嵌入的 Ajax 请求将在后台执行。如果用户实际上在另一个选项卡中登录到银行应用程序,则他的 cookie 将在浏览器中随时可用。浏览器将看到请求正在发送到银行的网站。由于请求是向 testbankapp.com 域发起的,因此浏览器在发送用户的有效 cookie 之前不会三思而后行。就是这样,pw!
samesite cookie 的解决方案
这是CSRF攻击的典型例子。在现实世界的攻击中,这将更加复杂。为了防止通过 CSRF 窃取 cookie,HTTP 工作组在 2016 年引入了 SameSite cookie 标志。让我们了解一下它是如何工作的。基本上 SameSite 键有两个可用值,即 lax 和 strict。 SameSite 示例:
设置 Cookie:phpsessid=oIZEL75Sahdgf34ghLnw;仅 Http;安全的; SameSite=严格考虑上面的 CSRF 示例。如果 SameSite=Strict,如果链接来自外部站点,则浏览器不会将 cookie 发送到已通过身份验证的网站。因此,在我们的示例中,即使用户点击攻击者发送的恶意 URL,浏览器也不会发送 cookie。值 strict 将阻止 cookie 的任何跨源使用,因此它被认为最适合银行应用程序。
但在其他情况下,可能需要有限的跨源使用。例如,如果网站想要将用户引导至 Github,则在访问该网站的常规链接时需要允许会话 cookie。这可以通过设置 SameSite=lax 来实现。在宽松模式下,将允许有限的跨站点使用,即,如果请求是 GET 请求并且请求是顶级的。顶级意味着 URL 栏应指示跨源请求。例如,考虑一下当您从某些 YouTube 评论重定向到 facebook.com 时的情况。
因此,如果您更喜欢银行级别的安全性
SameSite=Strict 是您的选择。
来源:https://www.wst.space/cookies-samesite-secure-httponly/
编辑:根据此链接Jetty不支持此功能。