node.js - csurf中间件如何验证 token ?

标签 node.js express csrf

我正在测试NodeJS express使用 csurf 的应用程序包装连同 express-session包。

问题

在测试时,我必须提出包含 csrf token 的请求在其中,但因为我真的不明白如何 csurf中间件验证csrf tokens在传入请求中,这会在测试应用程序时导致很多问题。

问题

有人可以简单地解释一下,如何csurf中间件验证csrf tokens当使用csurf时中间件 express-session包裹?当它在请求中收到 token 时,如何验证 token ? token 应该在 header 中还是在请求正文中发送?每次呈现新页面时都会创建新 token ,还是每个用户 session 只有一次 token ?

我还想知道使用csurf时 token 验证过程将如何改变中间件 cookie-parser包?

最佳答案

csurf 的工作原理是将 token secret 存储到 session 中(在 express-session 的情况下)或直接存储到 cookie 中(在 cookie- 的情况下)解析器)。然后,服务器端应通过 req.csrfToken() 使用动态生成的(每个请求) token 呈现网站。该csrf token 是从 token secret 派生的,可以稍后验证。

当调用 csurf protected 端点时,客户端应通过正文或 header 包含此 token (请参阅默认值 here )。然后,中间件将从 session 或 cookie 中获取 token secret ,然后验证它是由用户拥有的 secret 生成的有效 token 。如果验证失败,会抛出csrf错误。

由于生成的 csrf token 对时间不敏感,因此对于单元测试,您实际上可以将相同的 token secret 硬编码到 session 或 cookie 中,调用 req.csrfToken() 一次以接收有效 token ,然后保留在每次测试中重复使用相同的 token 。

关于node.js - csurf中间件如何验证 token ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57812757/

相关文章:

ajax - 如何在ExtJs AjaxRequest中实现CSRFGuard?

node.js - 如何连接到在 docker 容器中运行的比特币测试网

node.js - 获取 MongoDB 中特定月份和特定年份的文档

node.js - Webpack 开发服务器 - DeprecationWarning : Using 'compiler' as the first argument is deprecated

node.js - 如何在 Express.js 中读取并生成 pdf?

regex - 带参数的 Expressjs regExp

javascript - js请求上的Rails ActionController::InvalidCrossOriginRequest

python - 将 CSRF token 添加到硬编码的 Django 表单中

node.js - Mongoose 获取日期和周数具有当前日期的所有文档

node.js - Mongoose findOne 与排序