我正在测试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/