2012-01-03 36 views
8

người mới. Tôi đang sử dụng ExpressJS/Node. Dưới đây là thứ cấu hình của tôi:Làm cách nào để tạo mã thông báo CSRF trong 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()); 

tôi thấy csrf.js trong thư mục Express, và thấy rằng nó nên được tạo ra và gán cho req.body._csrf, nhưng tôi không chắc chắn làm thế nào để truy cập vào nó.

Đây là csrf.js đang

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

Trợ giúp? Cảm ơn!

Trả lời

16

người giúp đỡ động đã bị xóa khỏi nhanh kể từ 3.x.

Cách sử dụng mới sẽ là app.use(express.csrf());, xuất phát từ Connect.

4

Thêm mã thông báo cho người trợ giúp động.

app.dynamicHelpers({ 
    token: function(req, res) { 
    return req.session._csrf; 
    } 
}); 

Tham chiếu nó trong mẫu ngọc bích của bạn.

input(type='hidden', value=token) 

Nguồn: http://senchalabs.github.com/connect/middleware-csrf.html

+0

cảm ơn! hoàn hảo – bear

1

Trong Express 4.x phần mềm trung gian này bị xóa. Đối với Express 4.x, bạn có thể thực hiện như sau

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

Ah !! bạn cần phải đăng ký phần mềm trung gian csrf sau phần mềm trung gian sessioncookieParser của bạn.

Bên Route Hoặc Ctrl

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

hoặc Bạn có thể thiết lập một biến địa phương cũng như vậy

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

Sau đó, theo quan điểm

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

Bạn đang làm !! :)

0

Nếu bạn cũng muốn thiết lập một cookie an toàn cho CSRF token của bạn có thể được đọc bởi lối vào của bạn (góc chẳng hạn), bạn có thể làm điều này:

app.use csrf() 

app.use (req, res, next) -> 
    res.cookie('XSRF-TOKEN', req.csrfToken(), {secure: true}) 
next() 
Các vấn đề liên quan