kra*_*itz 5 javascript security csrf reactjs
我正在开发一个 React 应用程序,并正在考虑实施 CSRF 缓解技术。我决定使用同站点 cookie,但在此之前,我正在研究使用 CSRF 令牌并阅读大量帖子,称它们应该存储在隐藏的表单字段中。我想知道的是,将其存储在隐藏字段中和存储在类变量之类的东西中是否有区别?如果它的目的是在您准备向服务器发送请求时保留某个地方,那么它在客户端的存储方式是否重要?
其他答案是正确的,因为对于您在某处找到的教程(或 csrf 上的通用教程),使用在表单字段中写入的令牌来演示它更容易,传统的 Web 应用程序也将以这种方式工作。
其他人没有提到的是现代单页应用程序(例如使用 React 的单页应用程序)并不是这样工作的,通常您甚至没有表单,并且将令牌写入表单字段是没有意义的。所以这些应用程序通常不会这样做。
这还有一个实际的方面。您提到将其存储在类变量中。很好,但是它如何到达那里呢?令牌通常(不一定,但目前这是一个旁路)由服务器端 Web 应用程序生成。javascript SPA 将如何获取它?您需要将其写入页面中的某个位置,花费单独的请求来获取它会浪费资源。<meta name="csrf" content="...">通常发生的一件事是将其写入页面顶部的元标头(例如 )中,以便您的 SPA 可以从那里读取它并将其存储在任何需要的地方。
另一件经常发生的事情是甚至不需要csrf保护,因为api身份验证是基于请求头之类的东西(而不是cookie中的东西),浏览器不会自动发送这些东西,所以经典的csrf是不可行的。