Файлы cookie уязвимы для определенного типа c атаки, известного как подделка межсайтовых запросов (CSRF). Я не буду go вдаваться в подробности, так как кажется, что вы не будете использовать куки, но пример обычной атаки с использованием CSRF - это вставка формы, которая автоматически отправляет данные на одну из ваших конечных точек API сторонним лицам. сайт. Если вы используете сеансы на основе cook ie (а также не используете токен CSRF в своих запросах API), этот сторонний сайт теперь может отправлять запросы API от имени вашего пользователя, если они посещают эту страницу.
Если вы собираетесь использовать локальное хранилище, вы можете забыть о любых проблемах CSRF, связанных с использованием файлов cookie. При использовании локального хранилища ваша основная задача должна касаться атак XSS (межсайтовый скриптинг). Если вы используете в своем приложении React следующее:
<div dangerouslySetInnerHTML={{__html: title}}></div>
и значение title
- это то, что вы загрузили с сервера, тогда вы можете рискнуть вставить тег, который затем может получить доступ к содержимому localStorage.
Вы всегда должны быть обеспокоены потенциальными уязвимостями XSS, поскольку они допускают целый ряд атак. Что касается вашего вопроса, хотя, в частности, если вы хотите хранить что-то чувствительное в корзине пользователя (может быть, какую-либо личную информацию или номер кредитной карты) в локальном хранилище, уязвимость XSS даст злоумышленнику доступ к этим данным.
Вы можете узнать больше об уязвимостях XSS здесь .
Редактировать (ответ на вопрос автора в комментариях):
Скажем, например, вы загружаете имя пользователя пользователя из базы данных, а затем вы хотите отобразить его на веб-интерфейсе. Перед возвратом имени пользователя вы должны убедиться, что значение, которое вы загружаете из базы данных, содержит только значения, допустимые для имени пользователя (в данном случае, скажем, букв и пробелов). Вы можете использовать регулярное выражение и функцию .match()
, чтобы проверить, содержит ли имя пользователя только допустимые символы:
if(username.match(/[A-Za-z ]+/)) {
// all good!
} else {
// there was an invalid character
}
Следует ли санировать ВСЕ текстовые данные, поступающие из базы данных? Это, вероятно, будет неэффективно для любого выбранного текстового поля. Однако, если вы будете выводить эти данные непосредственно в DOM с помощью опасных наборов HTML, то было бы неплохо сначала очистить их.