来自浏览器扩展的 CSRF 令牌

CSRF Token from Browser Extension

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

  1. 我应该如何生成该令牌并将其发送到扩展程序以允许 用于验证来自扩展程序的请求的应用程序?
  2. 我应该如何存储带有扩展名的令牌?

我发现的答案涉及服务器向其发出请求的 api 以及依赖本地存储的令牌存储(我认为这不会解决我的问题,因为扩展应该能够POST 来自任意域)。感谢您的帮助!谢谢你。

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

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