在重定向过程中保持严格的SameSite会话Cookie策略(&Q;)
假设您有一个网站
A
,您可以通过PHP会话Cookie控制A
受保护页面的登录和导航。因此,为了获得最大的安全性,这些Cookie都是secure
、httponly
,并且使用的samesite
等于Strict
,并且仅限于A
的域,因此也仅限于主机。
如果登录的用户现在在A
确认付款,一些银行/支付服务将自动重定向该用户在相关服务的B
页执行后续/多因素身份验证。在客户端响应该附加身份验证后,无论是是还是否,系统通常都会将客户端重定向回A
。
我现在想知道的是关于安全的问题。使用上述会话cookie设置,重定向到B
并返回到A
显然会导致客户端丢失会话,并在A
重定向后注销。
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。
相关文章