service-worker - Service Worker 后台同步与 CSRF 保护的最佳实践模式

标签 service-worker csrf-protection background-sync

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

到目前为止,非常安全。

我想用服务 worker 实现后台同步,这样用户就可以离线发布数据,然后在获得连接后发送该数据。

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

这似乎是任何渐进式网站的普遍问题,处理它的最佳做法是什么?

我认为 background-sync 可以请求一个新的 token ,将它应用到要发送的数据然后发送它,这仍然是一个 CSRF 攻击者无法利用的循环,但我不是肯定的。任何人都可以确认这一点吗?

我是否缺少 Service Worker 或后台同步的某些功能?

最佳答案

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

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

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

关于service-worker - Service Worker 后台同步与 CSRF 保护的最佳实践模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38795709/

相关文章:

javascript - 类型错误 : Failed to register a ServiceWorker: A bad HTTP response code (404) was received when fetching the script

google-chrome - 在端口 3000 上运行的 Chrome 服务 worker 进程?

service-worker - Service Worker 的目的是什么?

javascript - EXTJS CSRF 保护

java - OWASP CSRFGuard : required token is missing from the request

ruby-on-rails-4 - 在提供 Web 和 API 的 Rails 应用程序中正确使用protect_from_forgery

service-worker - 服务 worker : when does the browser sync back again?

service-worker - 当您将版本/哈希添加到 Service Worker 文件时会发生什么?