Я пытаюсь реализовать решение для 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' });
});