导致Node.JS + Express故障的CSRF中间件

根据以前的SO问题已经成功地获得了以快递方式工作的CSRF中间件。 它正在生成令牌,但拒绝所有表单提交。

唯一可能的冲突我可以看到,我使用redis作为会话存储与connect-redis和插入到会话中的socket.io,但我已经注释掉了插槽位,它仍然不是很好玩。

这是我打电话给我的中间件的命令可能是棘手的吗?

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

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

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

 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文档 ,标记的input标记应如下所示:

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

所以用你的示例标记:

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

目前Connect(Express使用Connect下的引擎)试图find名称为“_csrf”的字段,但无法find它,因为它不存在于您的表单中。 因此,禁止访问。