在重定向过程中保持严格的SameSite会话Cookie策略(&Q;)

假设您有一个网站A,您可以通过PHP会话Cookie控制A受保护页面的登录和导航。因此,为了获得最大的安全性,这些Cookie都是securehttponly,并且使用的samesite等于Strict,并且仅限于A的域,因此也仅限于主机。

如果登录的用户现在在A确认付款,一些银行/支付服务将自动重定向该用户在相关服务的B页执行后续/多因素身份验证。在客户端响应该附加身份验证后,无论是是还是否,系统通常都会将客户端重定向回A

我现在想知道的是关于安全的问题。使用上述会话cookie设置,重定向到B并返回到A显然会导致客户端丢失会话,并在A重定向后注销。

这可以通过在服务器配置中将会话cookie的SameSite属性设置为Lax来避免。但是,如果我想将其保持为Strict怎么办?

我想到的解决方案,但不知道如何在PHP中实现:

服务器上的会话cookie配置定义了sameSite属性的Strict值,通常我希望如此。当在A上确认支付时,在服务器端处理该确认的函数,因此在重定向到B之前,将会话Cookie的samesite值更改为Lax。然后,在B重定向到的页面上,我将该值重新设置为Strict

这样的事情在PHP中是可能的吗?或者,您是否更愿意考虑使用Lax创建一个全新的会话Cookie,将$_SESSION数据复制到其中,然后在重定向后将$_SESSION数据恢复到您使用sameSite="Strict"A上用于会话的Cookie中?

或任何其他更适合的解决方案?


解决方案

据我所知,支付提供商通常需要在GET请求中传递某种签名的交易令牌。这样的令牌是在GET中发回的,以及重定向。

在这种情况下,当从站点B接收到带有重定向的令牌时,将会话数据分配给站点A生成的此类交易令牌,将带有重定向的令牌发送到站点B,并恢复会话数据。

令牌必须经过签名,因此站点A和站点B必须确保它源自站点A。

这需要额外的控制措施,以防止拥有此类令牌的人劫持会话:必须进行某种额外的会话验证,例如浏览器指纹识别。

在这种情况下,不需要获取相同的会话Cookie。

相关文章