2012-01-03 19 views
8

newbie. Estoy usando ExpressJS/Node. Aquí está mi config cosas:¿Cómo puedo generar tokens CSRF en Express?

var express = require('express'), 
app = express.createServer(), 
jade=require('jade'); 
// Configuration 
app.configure(function(){ 
app.set('views', __dirname + '/views'); 
app.use(express.logger()); 
app.use(express.cookieParser()); 
app.use(express.session({ secret: "secretive secret" })); 
app.set('view engine', 'jade'); 
app.use(express.bodyParser()); 
app.use(express.methodOverride()); 
app.use(require('stylus').middleware({ src: __dirname + '/public' })); 
app.use(app.router); 
app.use(express.static(__dirname + '/public')); 
app.use(express.csrf()); 

encontré csrf.js en directorios Express, y ve que debe ser generado y asignado a req.body._csrf, pero no estoy seguro de cómo acceder a ella.

Aquí está el código csrf.js

module.exports = function csrf(options) { 
var options = options || {} 
, value = options.value || defaultValue; 

return function(req, res, next){ 
// generate CSRF token 
var token = req.session._csrf || (req.session._csrf = utils.uid(24)); 

// ignore GET (for now) 
if ('GET' == req.method) return next(); 

// determine value 
var val = value(req); 

// check 
if (val != token) return utils.forbidden(res); 

next(); 
} 
}; 

Ayuda? ¡Gracias!

Respuesta

16

ayudantes dinámicos se ha eliminado de expreso desde 3.x.

El nuevo uso sería app.use(express.csrf());, que viene de Connect.

1

En Express 4.x este middleware está eliminado. Para Express 4.x, puede hacerlo de la siguiente manera

var csrf = require('csurf'); 
app.use(csrf()); 

Ah !! necesita registrar el middleware csrf después de su middleware session y cookieParser.

Dentro de ruta o Ctrl

res.render('someform', { csrf: req.csrfToken() }); 

o puede establecer una variable local también al igual que

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

Luego, en vista

input(type="hidden", name="_csrf", value="#{csrf}") 

Usted está hecho !! :)

0

Si también desea establecer una cookie segura para su token CSRF que puede ser leído por el frontend (angular, por ejemplo), usted puede hacer esto:

app.use csrf() 

app.use (req, res, next) -> 
    res.cookie('XSRF-TOKEN', req.csrfToken(), {secure: true}) 
next() 
Cuestiones relacionadas