导致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它,因为它不存在于您的表单中。 因此,禁止访问。