gpt4 book ai didi

node.js - 如何在express3中启用csrf?

转载 作者:太空宇宙 更新时间:2023-11-03 22:47:45 24 4
gpt4 key购买 nike

总的来说,我对express和nodejs都很陌生。我想知道如何启用csrf保护?问题是,不同版本有很多不同的教程,而且完全不向后兼容。

我已经尝试了几种方法,但它们似乎不起作用,这就是我现在所拥有的。问题是在我的表单中,csrf 值为空。

app.js

var express = require('express');
var http = require('http');
var path = require('path');
var validator = require('express-validator');
var app = express();

app.configure(function() {
app.set('port', 3001);
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'jade');
app.use(express.favicon());
app.use(express.logger('dev'));
app.use(express.json());
app.use(express.urlencoded());
app.use(express.methodOverride());
app.use(express.cookieParser('secret'));
app.use(express.bodyParser());
app.use(validator());
app.use(express.session());
app.use(express.csrf()); // Okey, I've used this middleware
app.use(app.router);
app.use(express.static(path.join(__dirname, 'public')));
app.use(express.errorHandler());
});

app.get('/', function(req, res) {
res.render('admin/login');
});

http.createServer(app).listen(app.get('port'), function() {
console.log('Express server listening on port ' + app.get('port'));
});

admin/login.jade

doctype 5
html
head
title= title
body
form(method='post', action='/admin')
input(type='hidden', name='csrf', value=token)
input(type='text', name='username')
input(type='password', name='password')
input(type='submit', value='Login')

最佳答案

您需要将生成的 token 存储在 res.locals 对象中,以便可以从模板中使用它,例如使用另一个中间件,在本示例中,它在每个请求中传递给模板:

app.use(express.csrf());
app.use(function (req, res, next) {
res.locals.csrftoken = req.csrfToken();
next();
});

然后在你的模板中

  div
form(method="post",action="/login")
input(type="hidden", name="_csrf", value=csrftoken)
button(type="submit") Login

我建议您关注 Adam Baldwin,他写了 lift security blog关于 Node.js 中的安全性您可以在 his repo 中找到安全的 Express 骨架。 。

关于node.js - 如何在express3中启用csrf?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20420762/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com