node.js - CSRF 中间件导致麻烦 Node.JS + Express

标签 node.js express csrf middleware

根据之前的 SO 问题,已成功让 csrf 中间件在 express 中工作。它可以很好地生成 token ,但它拒绝所有表单提交。

我能看到的唯一可能的冲突是,我将 redis 用作带有 connect-redis 的 session 存储并将 socket.io 插入到 session 中,但我已经注释掉了套接字位,但它仍然不能很好地播放。

这是我调用我的中间件的顺序,这里可能有点古怪?

( CoffeeScript )

app.configure ->
    app.set 'views', __dirname + '/views'
    app.set 'view engine', 'jade'
    app.use express.bodyParser()
    app.use express.methodOverride()
    app.use express.cookieParser()
    app.use express.session
        secret: "itsasecret"
        store: sessionStore
    app.use express.csrf()
    app.dynamicHelpers
        token: (req, res) ->
        req.session._csrf
    app.use app.router
    app.use express.static(__dirname + '/public')

这是响应发布数据的路由。

(这不是开发代码,只是我学习 Node 我很清楚如果我把它放在网上这将是一个怪物)

app.post '/admin/logintry', (req, res) ->
    if req.body.username is 'Tim' and req.body.password is 'TempPassword'
        req.session.adminIn = true
        res.redirect '/admin/home'
    else
        res.redirect '/admin/login?failed=true'

这是在表单页面上到达浏览器的 HTML:

<input type="hidden" token="5ODFxml1QAhQvOmq1QE6Qd7n">

以及从“/admin/logintry”收到的响应:

Forbidden

Node、Express 和 SO 的新手,最近才正确学习 javascript,甚至不确定从哪里开始寻找问题。非常感谢任何帮助,即使只是关于从哪里开始挖掘的帮助。

干杯。

最佳答案

如果您查看 Connect - csrf documentation , token 的 input 标记应如下所示:

<input type="hidden" name="_csrf" value="{token}" />

因此对于您的示例 token :

<input type="hidden" name="_csrf" value="5ODFxml1QAhQvOmq1QE6Qd7n" />

当前 Connect(Express 在后台使用 Connect)正在尝试查找名称为“_csrf”的字段但找不到它,因为它不存在于您的表单中。因此,它禁止访问。

关于node.js - CSRF 中间件导致麻烦 Node.JS + Express,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10070412/

相关文章:

node.js - 如何在 Mongodb 聚合(组)中进行 $sum 和 $filter

javascript - 回调返回值但似乎未定义

node.js - 在 Node/ExpressJs 中类似的 Rails ActiveRecord 迁移

reactjs - 异步/等待 redux thunk 未正确返回操作 promise

php - Laravel CSRF 保护

javascript - npm console.table 日志没有显示任何内容

javascript - 如何编写任意长的Promise链

node.js - Node js 将 mp4 转换为 m3u8 后,第一个 m3u8 ts 段不起作用

php - CodeIgniter + jQuery UI 自动完成 = 500 内部服务器错误(带有代码)由于 CSRF 设置为 TRUE

authentication - 无法登录到 mailgun 帐户。 "The CSRF session token is missing."