Вопрос проверяет знание основных методов защиты backend-сервисов от атак и утечек данных.
Безопасность backend-сервисов — это комплекс мер, направленных на защиту данных, предотвращение несанкционированного доступа и обеспечение стабильной работы. Рассмотрим ключевые подходы.
Аутентификация проверяет, кто пользователь, а авторизация — что ему разрешено делать. Используйте протоколы вроде OAuth 2.0 или JWT для безопасной передачи токенов. Пример на Node.js с JWT:
const jwt = require('jsonwebtoken');
const token = jwt.sign({ userId: 123 }, 'secret_key', { expiresIn: '1h' });
// Проверка токена
jwt.verify(token, 'secret_key', (err, decoded) => {
if (err) return res.status(401).send('Unauthorized');
req.user = decoded;
});Всегда проверяйте и очищайте данные от пользователя, чтобы избежать SQL-инъекций и XSS. Используйте библиотеки вроде Joi или express-validator. Пример на Express:
const { body, validationResult } = require('express-validator');
app.post('/user', [
body('email').isEmail(),
body('password').isLength({ min: 6 })
], (req, res) => {
const errors = validationResult(req);
if (!errors.isEmpty()) return res.status(400).json(errors);
// Обработка запроса
});Используйте HTTPS для шифрования трафика и bcrypt для хеширования паролей. Пример хеширования пароля:
const bcrypt = require('bcrypt');
const saltRounds = 10;
bcrypt.hash('user_password', saltRounds, (err, hash) => {
// Сохранить hash в БД
});Ограничьте количество запросов от одного IP с помощью middleware, например, express-rate-limit:
const rateLimit = require('express-rate-limit');
const limiter = rateLimit({ windowMs: 15 * 60 * 1000, max: 100 });
app.use(limiter);Регулярно обновляйте библиотеки для закрытия уязвимостей. Ведите логирование событий безопасности, но не храните чувствительные данные в логах.
Вывод: Комбинируйте эти подходы для создания многоуровневой защиты. Особенно важно применять их в сервисах, работающих с конфиденциальными данными или высоконагруженных системах.