Advertisement
Guest User

Untitled

a guest
Jan 30th, 2015
177
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.08 KB | None | 0 0
  1. //since the csrf does not block GET requests let's ban them manually
  2. function createToken(salt, secret) {
  3. return salt + crypto
  4. .createHash('sha1')
  5. .update(salt + secret)
  6. .digest('base64');
  7. }
  8. function checkToken(token, secret) {
  9. if ('string' !== typeof token) return false;
  10. return token === createToken(token.slice(0, 10), secret);
  11. }
  12.  
  13. app.use(function (req, res, next) {
  14. var isAllowed = true;
  15. //console.log('req.csrfNeeded: ', req.csrfNeeded);
  16.  
  17. if (req.csrfNeeded) {
  18. res.cookie('XSRF-TOKEN', req.csrfToken());
  19. res.locals.token = req.csrfToken();
  20.  
  21. if ((req.method === 'POST' || req.method === 'GET') &&
  22. req.url.indexOf('/api/v2/') !== -1) {
  23. var secret = req.session._csrfSecret;
  24. var val = req.headers['x-xsrf-token'];
  25. isAllowed = checkToken(val, secret);
  26. }
  27. }
  28.  
  29. //console.log('csrfNeeded check: ', req.method, req.url, isAllowed);
  30.  
  31. if (!isAllowed) {
  32. res.status(403);
  33. res.render('403.jade', {error: '403: Forbidden'});
  34. } else {
  35. next();
  36. }
  37. });
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement