服务工作者背景的最佳实践模式 - 与CSRF保护同步

时间:2016-08-05 18:29:46

标签: service-worker csrf-protection background-sync

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

到目前为止,非常安全。

我想与服务工作者实现后台同步,因此用户可以离线发布数据,然后在获得连接后再发送数据。

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

这似乎是任何进步网站的一般问题,处理它的最佳做法是什么?

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

我是否缺少服务工作者或后台同步功能?

1 个答案:

答案 0 :(得分:1)

我没有资格就CSRF的主题发表“最佳实践”,但是根据我对OWASP guidelines on CSRF的理解是正确的。

目前,我以类似的方式使用OAuth:为个人客户端发放刷新和承载令牌。刷新令牌的生命周期明显长于承载令牌。客户可以选择使用刷新令牌来制作他们认为合适的新承载令牌。有些客户可能会选择“完全轮换”,每次请求都会有新的持票人。有些人可能会选择使用持票人,直到报告失败,然后再制作一个新的。

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