【问题标题】:CSRF Middleware causing trouble Node.JS + ExpressCSRF 中间件惹麻烦 Node.JS + Express
【发布时间】:2012-04-21 15:51:49
【问题描述】:

已成功使 csrf 中间件按照之前的 SO 问题快速运行。它生成令牌很好,但它拒绝所有表单提交。

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

这就是我调用中间件的顺序,这里可能有问题吗?

(咖啡脚本)

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')

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

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

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,甚至不确定从哪里开始寻找问题。非常感谢任何帮助,即使只是关于从哪里开始挖掘。

干杯。

【问题讨论】:

    标签: node.js express csrf middleware


    【解决方案1】:

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

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

    因此,使用您的示例令牌:

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

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

    【讨论】:

    • 现在一切正常。根据上一个问题修复时取出名称。感谢您的快速回复!
    猜你喜欢
    • 1970-01-01
    • 2012-05-24
    • 2017-03-28
    • 2015-12-31
    • 2014-03-10
    • 1970-01-01
    • 2010-11-11
    • 2011-06-12
    • 1970-01-01
    相关资源
    最近更新 更多