Зачем экспресс отправлять JSESESSIONID в браузер в виде файла cookie, если он не указан? - PullRequest
0 голосов
/ 22 апреля 2019

Я пытаюсь реализовать решение для csrf атак на форму регистрации, поэтому я хотел использовать идентификатор сеанса в качестве текста, который должен быть подписан секретным ключом, а затем хэширован с помощью sha512 с hmac для отправки в cookie иФорма скрытого ввода для будущих проверок при отправке, однако я обнаружил ошибку, что req.session не определено.

Вот проблема, как это неопределено, учитывая, что Google Chrome Inspect показывает, что есть файл cookie с именем JSESESSIONIDотправлено из моего приложения в браузер с очень большим значением.

, поэтому мои вопросы:

1- что это за сеанс (JSESESSIONID)?

2-почему nodejs express отправляет этот токен в cookie в первую очередь, учитывая, что я не указал это?

3 - подходит ли этот токен сеанса в качестве моего значения hmac или нет?

Я искал все стекировочные потоки, но никто ничего не говорит об этом токене в nodejs и express.поэтому я был бы рад найти ответ здесь.

ОБНОВЛЕНИЕ:

это мой app.js, где вы можете увидеть мои Middelwares (я не используюсессия var)

//var createError = require('http-errors');
var express = require('express');
var path = require('path');
var cookieParser = require('cookie-parser');
var session = require('express-session');
//var csrf = require('csurf');
var logger = require('morgan');
var https = require('https');
var fs = require('fs');
var privateKey  = fs.readFileSync('C:/Users/Ahmeed/Desktop/front/server.key', 'utf8');
var certificate = fs.readFileSync('C:/Users/Ahmeed/Desktop/front/server.cert', 'utf8');
var credentials = {key: privateKey, cert: certificate};
//var bodyParser = require('body-parser');

var signupRouter = require('./routes/signup.js');
var verificationRouter = require('./routes/verify.js');
var loginRouter = require('./routes/login.js');


var app = express();

// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'ejs');

app.use(logger('dev'));
app.use(express.json());
app.use(express.urlencoded({ extended: true }));
app.use(cookieParser());
//app.use(express.csrf());
app.use(express.static(path.join(__dirname, 'public')));

app.use('/signup', signupRouter);
app.use('/verify', verificationRouter);
app.use('/login', loginRouter);




var httpsServer = https.createServer(credentials, app);

httpsServer.listen(3000, function() {
  console.log("server started listening on port 3000");
});

module.exports = app;

и эта часть моего роутера

router.get('/', function (req, res, next) {
  var session = req.session;
  console.log(session);
  var hash = crypto.createHmac('sha512', 'ABCD').update(session).digest('hex');
  res.cookie( 'X-XSRF-TOKEN', hash,{ maxAge: 1000 * 60 * 10, httpOnly: true });
  res.render('signup', { title: 'signup section' });
});
...