来自浏览器扩展的CSRF令牌

时间:2016-06-30 18:52:10

标签: javascript node.js csrf csrf-protection kraken.js

我有一个快速的应用程序使用krakenjs / lusca来防止CSRF攻击,这适用于我的域内的所有路由。但是,我还有一个chrome扩展程序,我希望能够用来从任何域POST到应用程序。根据我的研究,我认为我应该使用基于令牌的身份验证,所以我有两个问题:

  1. 我应该如何生成该令牌并将其发送到允许的扩展名 用于验证来自扩展程序的请求的应用程序?
  2. 如何将该令牌与扩展程序一起存储?
  3. 我发现的答案是关注服务器向其发出请求的api,以及依赖本地存储的令牌存储(我认为这不会解决我的问题,因为扩展应该可以从任意域发出POST )。我感谢任何帮助!谢谢。

1 个答案:

答案 0 :(得分:0)

  1. 您无法100%保护您的终端扩展,但有一些解决方案可以限制其他人以意想不到的方式使用它。最简单的解决方案是使用JsonWebToken。服务器将加密具有预定义结构的对象,例如{email:'user_email@google.com',created_date:new Date()}并将其发送回扩展程序。当服务器收到扩展的请求时,它将尝试解密令牌,并在响应之前查看数据是否有效(遵循预定义的格式)。为了更安全,您应该进行一些身份验证,例如让用户首先登录谷歌,看看他们是否真的是他们在发布令牌之前声称的人...我建议你研究OAuth2流程如何工作以获得参考!

  2. 在扩展程序上存储令牌有几个选项。我更喜欢将它存储在chrome.storage.sync https://developer.chrome.com/extensions/storage#property-sync上。首次加载扩展时,应检查是否存在令牌,如果没有,则应调用服务器获取。