csrf.js 703 B

123456789101112131415161718192021222324252627
  1. const loggerFactory = require('@alias/logger');
  2. const logger = loggerFactory('growi:middleware:csrf');
  3. module.exports = (crowi) => {
  4. return async(req, res, next) => {
  5. const token = req.body._csrf || req.query._csrf || null;
  6. const csrfKey = (req.session && req.session.id) || 'anon';
  7. logger.debug('req.skipCsrfVerify', req.skipCsrfVerify);
  8. if (req.skipCsrfVerify) {
  9. logger.debug('csrf verify skipped');
  10. return next();
  11. }
  12. if (crowi.getTokens().verify(csrfKey, token)) {
  13. logger.debug('csrf successfully verified');
  14. return next();
  15. }
  16. logger.warn('csrf verification failed. return 403', csrfKey, token);
  17. return res.sendStatus(403);
  18. };
  19. };