#angular #csrf #restify #csrf-token
Вопрос:
Я работаю над узловым приложением, использующим REST API с данными json, которые должны быть защищены от атаки CSRF. Пример кода приведен ниже:
index.js
const
restify = require('restify'),
restifyPlugins = require('restify').plugins,
serverPort = 3000;
var CookieParser = require('restify-cookies');
var csrf = require('csurf');
// Route middlewares
var csrfProtection = csrf({ cookie: true });
server.use(CookieParser.parse);
server.use(csrfProtection); *// Verify all API with CSRF token*
const server = restify.createServer({
name: 'Test App'
});
//Generate CSRF token on server side and pass it to client side
server.get('/api', (req, res, next) => {
console.log(req.csrfToken())
res.setCookie('XSRF-TOKEN', req.csrfToken(),{path: '/',httpOnly: false });
res.send('test ');
return next();
});
//And on the client-side a header XSRF-TOKEN :**CSRFtoken** is passed
server.post('/api/checkCSRF', (req, res, next) => {
res.send({"message" :"Success"})
return next();
});
server.listen(serverPort)
Теперь это работает, если передается недопустимый маркер csrf. Но при тестировании с помощью BurpSuite с включенным перехватом злоумышленник получает доступ ко всем заголовкам/файлам cookie и данным полезной нагрузки(формат json). И, следовательно, он мог совершать действия с учетной записью пользователя без внимания пользователя.
Я прочитал пару статей, но все еще не смог найти подходящего способа его реализации. Я также читал, что использование файлов cookie-это неправильный подход. Есть ли какой-нибудь другой способ предотвратить это? Например, добавить уникальный токен CSRF в каждый адрес HTTP-запроса и проверить, что токен CSRF действителен, прежде чем обрабатывать запрос на стороне сервера?
Любая помощь, ссылки, советы, критика будут оценены по достоинству.
Заранее спасибо.