Этот вопрос проверяет понимание уязвимостей безопасности при использовании JSON Web Tokens и зачем нужно избегать хранения конфиденциальной информации в токенах.
JSON Web Tokens (JWT) стали популярным стандартом для аутентификации и передачи информации между сторонами в виде JSON-объекта. Токен состоит из трёх частей: заголовка, полезной нагрузки (payload) и подписи, разделённых точками и закодированных в Base64URL.
Основная проблема заключается в том, что payload JWT не шифруется по умолчанию — он только кодируется в Base64. Любой, кто получит токен, может легко декодировать его и прочитать содержимое. Например, токен eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c можно декодировать онлайн-инструментами, получив данные пользователя.
// НЕПРАВИЛЬНО — хранение чувствительных данных в JWT
const payload = {
userId: 123,
email: "user@example.com",
creditCard: "4111-1111-1111-1111", // Опасность!
role: "admin",
exp: Math.floor(Date.now() / 1000) + 3600
};
// После подписи токен будет передан клиенту
// Любой, кто получит токен, увидит номер картыВместо хранения чувствительных данных в JWT следует:
// ПРАВИЛЬНО — минимальные данные в JWT
const safePayload = {
sub: "user_123", // только идентификатор
iat: Math.floor(Date.now() / 1000),
exp: Math.floor(Date.now() / 1000) + 900 // 15 минут
};
// На сервере по ID пользователя получаем данные из БД
async function getUserData(userId) {
return db.query(
"SELECT email, preferences FROM users WHERE id = $1",
[userId]
);
}Вывод: JWT предназначены для передачи верифицируемых утверждений, а не для хранения секретов. Храните в токенах только минимальную информацию, необходимую для аутентификации, а все чувствительные данные — в защищённом хранилище на сервере. Это особенно важно в production-средах с требованиями compliance (PCI DSS, GDPR).
Уровень
Рейтинг:
4
Сложность:
5
Навыки
JavaScript
Node.js
Ключевые слова
Подпишись на Python Developer в телеграм