Skip to content

Instantly share code, notes, and snippets.

@nowelium
Created November 18, 2011 12:19
Show Gist options
  • Save nowelium/1376306 to your computer and use it in GitHub Desktop.
Save nowelium/1376306 to your computer and use it in GitHub Desktop.
yet-another-express-csrf
const crypto = require('crypto');
const connect = require('connect');
exports.token = function(request, response){
if(request.session){
var lastAccess = request.session.lastAccess;
var csrf = crypto.createHash('md5').update('' + Date.now() + lastAccess).digest('hex');
return request.session['csrf'] = csrf;
}
return null;
};
exports.check = function(options){
return connect.createServer(function(request, response, next){
if(/POST/i.test(request.method)){
if(request.body){
if(!('csrf' in request.body)){
// no check csrf
return next();
}
var requestCSRF = request.body['csrf'];
var sessionCSRF = request.session['csrf'];
if(requestCSRF === sessionCSRF){
// valid csrf
return next();
}
return next(new Error('Cross-size request forgery attempt discovered'));
}
return next();
}
return next();
});
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment