2012-01-03 10 views
8

newbie. Używam ExpressJS/Node. Oto mój config rzeczy:Jak wygenerować tokeny CSRF w Expressie?

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

znalazłem csrf.js w katalogach Express, i widzę, że powinien on zostać wygenerowany i przypisany do req.body._csrf, ale nie jestem pewien, jak do niego dostęp.

Oto kod 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(); 
} 
}; 

Pomoc? Dzięki!

Odpowiedz

16

Dynamiczne pomocników została usunięta z Express, ponieważ 3.x.

Nowy sposób użycia to app.use(express.csrf());, który pochodzi z Connect.

1

W tym rozwiązaniu usunięto to oprogramowanie pośrednie. W Express 4.x możesz to zrobić w następujący sposób:

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

Ah !! musisz zarejestrować oprogramowanie pośredniczące csrf po Twoim oprogramowaniu pośredniczącym session i cookieParser.

Wewnątrz trasie lub Ctrl

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

lub można ustawić zmienną lokalną jak również tak

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

Następnie w widoku

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

Jesteś zrobić !! :)

0

Jeśli też chcesz ustawić bezpieczną ciasteczko dla token CSRF który może być odczytany przez frontend (kątowy na przykład), można to zrobić:

app.use csrf() 

app.use (req, res, next) -> 
    res.cookie('XSRF-TOKEN', req.csrfToken(), {secure: true}) 
next() 
Powiązane problemy