Nano Hash - криптовалюты, майнинг, программирование

Экранирование ввода HTML - как правильно?

Рассмотрим применение:

JS Framework Frontend (например, AngularJS) и REST API Backend (например, Jackson + Spring REST) ​​и некоторые почтовые шаблоны HTML.

каков правильный способ глобальной защиты всей системы от XSS?

Первое, что нужно сделать, это защитить веб-компоненты на внешнем интерфейсе от раскрытия объектов HTML из полей ввода.

Во-вторых, запретить серверным службам создавать HTML-шаблоны (например, HTML-письма), которые могут содержать вредоносные значения из пользовательских полей.

Представьте себе поле, такое как сообщение/комментарий, которое будет содержать теги в стиле Twitter — #tag будет автоматически преобразован в гиперссылку, указывающую на someurl/tags/tag, которая будет построена путем создания HTML-тегов при рендеринге, а затем окончательный div будет добавлен к веб-сайту. . Другим использованием этого типа div было бы встраивание его в почтовый шаблон HTML, который будет отправлен другим пользователям через SMTP.

В таком приложении будут различные поля.

Я не хочу запрещать пользователям вводить не буквенно-цифровые символы из этих полей с помощью регулярных выражений или внутренней проверки. Однако этот вход будет открыт таким образом, что по умолчанию будут разрешены XSS-атаки.

Каким будет правильный способ защитить такие поля? Следует ли это делать глобально, используя фильтр/конвертер/экранировщик Джексона, при отправке значения поля в бэкэнд? Или его следует экранировать каждый раз при открытии каждого места в интерфейсе или почтовых шаблонах?

05.05.2017

Ответы:


1

Вам следует:

  • Экранируйте значения во внешнем интерфейсе при их отображении. Это должно быть сделано с помощью глобальной утилиты или настройки. Некоторые интерфейсные фреймворки делают это по умолчанию (например, React).
  • Проверяйте значения при отправке в серверную часть и предотвращайте использование символов там, где это уместно. Например. Поле имени, вероятно, не нуждается в < или >.

Вы можете рассмотреть:

  • Предоставление конечных точек, которые возвращают экранированные значения, если это запрошено (например, &escapeHtml=true). Я лично не фанат этого, но, возможно, это подходит для вашей ситуации.

Я не рекомендую:

  • Экранирование всех данных перед сохранением в бэкэнде. Возможно, это личное предпочтение, но экранирование данных для рендеринга html предполагает, что данные будут использоваться только для этого (например, что произойдет, если кто-то вызовет API напрямую для помещения данных в CSV или другой формат, для которого html экранирует не применять).
05.05.2017
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..