Безопасность: что никогда не следует хранить в хранилище
Не храните токены или PII в localStorage
«Безопасность: что никогда не следует хранить в хранилище» — бесплатный урок HTML Academy на CoddyKit. Это урок 4 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения HTML Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс HTML Academy содержит 4 уроков всего.
Хранилище содержит обычный текст
localStorage и sessionStorage сохраняют данные на диске без шифрования, в профиле пользователя. Любой процесс с доступом к файловой системе — включая вредоносные программы, средства резервного копирования или другого вошедшего в систему пользователя — может прочитать каждое сохранённое значение, не обращаясь к браузеру.
Доступно любому скрипту
Все скрипты, работающие в одном источнике, используют одно и то же хранилище. Успешная XSS-атака, скомпрометированный сторонний SDK или вредоносное расширение браузера могут вызвать localStorage.getItem и украсть все сохранённые значения. Изоляции между скриптами нет.
Никогда не храните токены аутентификации
Не помещайте токены сеанса, токены JWT, токены обновления или ключи API в localStorage. Если злоумышленник внедрит всего одну строку JavaScript, токен немедленно утечёт. Используйте файлы cookie с атрибутами httpOnly и SameSite, а также с включённой безопасной передачей, чтобы токен никогда не был доступен из JavaScript.
Никогда не храните пароли
Хранить пароли в любой форме — открытом виде, в виде хеша или в зашифрованном виде — на клиенте неправильно. Хеширование на клиенте не помогает, если злоумышленник может прочитать хеш и повторно использовать его. Обработка паролей должна полностью выполняться на сервере с помощью специализированного алгоритма хеширования, например bcrypt.
Никогда не храните данные банковских карт
PCI-DSS запрещает хранить номера карт, коды CVV, данные магнитной полосы или сроки действия в клиентском хранилище. Вместо этого используйте токенизированного платёжного провайдера (Stripe, Braintree, Adyen), который возвращает краткоживущий токен, привязанный к вашему источнику.
Никогда не храните персональные идентификаторы
Государственные удостоверения личности, полные даты рождения, домашние адреса и медицинские данные привлекают внимание регуляторов (GDPR, HIPAA) и злоумышленников. Храните только то, что требуется для текущего сеанса, повторно запрашивайте эти данные при необходимости, а источником достоверных данных пусть остаётся сервер.
XSS многократно усиливает ущерб
Уязвимость XSS, из-за которой раскрывается document.cookie, уже опасна. Та же уязвимость на странице, где токены хранятся в localStorage, передаёт злоумышленнику сразу все сохранённые значения. Считайте localStorage областью, где «если скомпрометирован один скрипт, скомпрометировано всё».
Шифрование вас не спасёт
Шифрование значений ключом, который также находится в JavaScript, не обеспечивает реальной защиты — злоумышленник, способный прочитать зашифрованные данные, сможет прочитать и ключ. Настоящие секреты должны оставаться на сервере и выдаваться заново, а не сохраняться на стороне клиента.
Что можно безопасно хранить
Настройки интерфейса (тема, свёрнутая боковая панель, язык), несекретные флаги функций, содержимое черновиков форм и временное состояние пошаговых форм вполне можно хранить. Пользователь всё равно может их увидеть, а их утечка не позволяет захватить учётную запись.
localStorage.setItem("theme", "dark");
localStorage.setItem("sidebar:collapsed", "true");
localStorage.setItem("draft:post-123", draftMarkdown);Используйте cookie для аутентификации
Передавайте данные для аутентификации через Set-Cookie: token=...; HttpOnly; Secure; SameSite=Strict. Флаг HttpOnly делает cookie недоступным JavaScript и тем самым нейтрализует большинство XSS-нагрузок для кражи токенов, даже если на странице есть другие уязвимости.
Меры защиты при использовании хранилища
Если необходимо кэшировать потенциально чувствительные данные, жёстко ограничьте область их действия (короткий TTL, очищайте данные при выходе из системы, удаляйте их при закрытии вкладки через sessionStorage), применяйте строгую политику безопасности содержимого для блокировки внедрённых скриптов и проверяйте каждый сторонний скрипт, работающий на страницах после аутентификации.
Проверка знаний
Почему хранение токенов аутентификации в localStorage считается угрозой безопасности?
Итоги
Веб-хранилище хранит данные в открытом виде, доступно для чтения скриптам и является общим для источника. Никогда не помещайте туда токены аутентификации, пароли, платёжные данные или персональную информацию, регулируемую законом. Храните секреты в cookie с флагом httpOnly, а localStorage оставляйте для безвредного состояния интерфейса, которое пользователь и так мог бы увидеть.
Изучай HTML с ИИ-репетитором — бесплатно
Пиши и запускай код прямо в браузере, получай мгновенную помощь от ИИ-репетитора 24/7 и продолжи учиться на сайте или в приложении.
- Курсы
- 40
- Уроки
- 159
Часто задаваемые вопросы
Урок «Безопасность: что никогда не следует хранить в хранилище» бесплатный?
Да — полный текст урока «Безопасность: что никогда не следует хранить в хранилище» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс HTML Academy, подпишись на CoddyKit PRO. Курс HTML Academy содержит 4 уроков всего.
Чему я научусь в уроке «Безопасность: что никогда не следует хранить в хранилище»?
Не храните токены или PII в localStorage Ты практикуешь HTML Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать HTML Academy?
Предыдущий опыт не требуется. HTML Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 4 из 4.
Сколько времени занимает урок «Безопасность: что никогда не следует хранить в хранилище»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке HTML Academy?
Да. Каждый урок HTML Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- localStorage и sessionStorage
- Получение, установка и удаление элементов
- Отслеживание событий хранилища
- Безопасность: что никогда не следует хранить в хранилище