Защита CSRF для Node.js Express 4 и passport.js не работает - PullRequest
0 голосов
/ 03 февраля 2019

Используя csurf, я пытаюсь интегрировать защиту csrf в мое приложение node.js express 4.Это мой код:

РЕДАКТИРОВАТЬ: приведенный ниже код был обновлен в соответствии с решением, которое я нашел.

    "use strict";
    var http = require('http');
    var https = require('https');

    var port = process.env.PORT || 80,
     express = require('express'),
     csrf = require('csurf'),
     bodyParser = require('body-parser');

    var LocalStrategy = require('passport-local').Strategy,
        csrfProtection = csrf({ cookie: true }),
        mongoose = require('mongoose'),
        conn = mongoose.createConnection('foo'),
        cookieParser = require('cookie-parser'),
        passport = require('passport'),
            session = require('express-session'),
            MongoStore = require('connect-mongo')(session),
            app = express();

        app.set('view engine', 'ejs');
        var csrfProtection = csrf({ cookie: true }); // doesn't work either
        require('passport')(passport); 
        app.use(cookieParser("foo")); 
        app.use(bodyParser.json());
        app.use(bodyParser.urlencoded({extended: true})); //extended: true|false does not make any difference

        app.use(session({
            //foo
        }));

        app.use(passport.initialize());
        app.use(passport.session()); 

        require('./app/routes.js')(app, passport); //routes inside here cause a ReferenceError: csrfProtection is not defined  

        http.createServer(app).listen(port);
        https.createServer(options, app).listen(443, function () {
            //foo
        });

-- routes.js --

        var csrf = require('csurf'), //this needs to go in here
            csrfProtection = csrf(); //this needs to go in here

    module.exports = function(app, passport) {
       app.route('/somepage')
       .get(csrfProtection, function(req, res) { 
          res.render('somepage', { csrfToken: req.csrfToken()});
       });
    };

-- routes.js end--

По какой-то странной причине csrfProtection остается неизвестным внутри маршрутов моей страницы, вызывая ReferenceError (см.комментарий внутри кода).Чего мне не хватает?

1 Ответ

0 голосов
/ 04 февраля 2019

EDIT: ignoreMethods Массив методов, для которых проверка токенов CSRF будет отключена.По умолчанию [GET, HEAD, OPTIONS].
Попробуйте установить ['HEAD','OPTIONS']

csrfProtection = csrf(
    { cookie: true, ignoreMethods:['HEAD','OPTIONS' ] }
)
.
...