3

我有一个使用嵌入在页面中的一次性令牌来确保 CSRF 保护的请求 - 攻击者可能能够欺骗我的用户发出非法请求,但他们无法获得令牌,即使他们可以随每个请求而更改并且可能过期。

到目前为止,如此安全。

我想使用服务人员实现后台同步,以便用户可以离线发布数据,然后在他们获得连接时发送该数据。

但是,这意味着该页面无法获取 CSRF 令牌,并且在用户构建它时与请求链接的任何令牌在实际发送数据时可能是无效的。

这似乎是任何进步网站的普遍问题,处理它的最佳实践是什么?

我认为后台同步可以请求一个新令牌,将其应用于要发送的数据,然后发送它,这仍然是一个 CSRF 攻击者无法利用的循环,但我不确定. 任何人都可以确认这一点吗?

我是否缺少服务人员或后台同步的某些功能?

4

1 回答 1

3

我没有资格谈论 CSRF 主题的“最佳实践”,但根据我对CSRF 的 OWASP 指南的理解,您的想法是正确的。

目前,我以类似的方式使用 OAuth:向各个客户端发出刷新和不记名令牌。刷新令牌的生命周期明显长于不记名令牌。客户端可以选择使用刷新令牌来铸造新的不记名令牌。一些客户可能会选择“完全轮换”,即每次请求都有一个新的承载。有些人可能会选择使用承载,直到它报告失败,然后再铸造一个新承载。

在您的场景中,您的后台同步将请求和接收刷新和不记名令牌。它可以继续使用手头的不记名令牌构建 URL,然后在尝试失败时同步时,使用刷新令牌生成新的不记名并使用新不记名重建 URL。当然,如果刷新已经过期(或被撤销),那么你离线时间太长了,你需要重新认证。

于 2016-08-05T19:06:10.760 回答