Меры по предотвращению уязвимости XSS (как в Twitter несколькими днями ранее)

StackOverflow https://stackoverflow.com/questions/816224

  •  03-07-2019
  •  | 
  •  

Вопрос

Даже такие известные сайты, как Twitter, страдают от XSS-уязвимости. Что нам следует делать, чтобы предотвратить такого рода атаки?

Это было полезно?

Решение

Первое, что вы можете сделать, это установить для файлов cookie значение «Только HTTP»…что, по крайней мере, защищает от перехвата файлов cookie сеанса.Как будто кто-то украл ваш файл cookie, хотя вы, скорее всего, являетесь администратором своего сайта.

Остальное сводится к проверке всех вводимых пользователем данных.

  • ПРАВИЛО № 0. Никогда не вставляйте ненадежные данные, кроме разрешенных мест.
  • ПРАВИЛО № 1. Экранирование HTML перед вставкой ненадежных данных в содержимое HTML-элемента
  • ПРАВИЛО № 2. Экранирование атрибута перед вставкой ненадежных данных в общие атрибуты HTML
  • ПРАВИЛО № 3. Экранирование JavaScript перед вставкой ненадежных данных в значения данных HTML JavaScript
  • ПРАВИЛО № 4. Экранирование CSS перед вставкой ненадежных данных в значения свойств стиля HTML
  • ПРАВИЛО № 5. Экранирование URL-адреса перед вставкой ненадежных данных в атрибуты URL-адреса HTML

Очень длинная тема, подробно обсуждаемая здесь:

http://www.owasp.org/index.php/XSS_(Cross_Site_Scripting)_Prevention_Cheat_Sheet

http://www.owasp.org/index.php/Cross_site_scripting

XSS — это лишь один из многих эксплойтов, и каждый веб-разработчик должен выучить наизусть 10 лучших OWASP, имхо.

http://www.owasp.org/index.php/Top_10_2007

Другие советы

Точно так же, как вы можете сделать внедрение SQL без проблем с помощью подготовленных операторов, вы можете сделать XSS без проблем с помощью механизма шаблонов (сериализатора DOM), который выполняет аналогичные действия.

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

Я не знаю, с чем вы пишете свой код, но если вы используете asp.net, вы частично охвачены. У asp.net есть то, что они называют проверкой запросов, что, когда включено, предотвращает внедрение вредоносного скрипта через пользовательский ввод.

Но иногда вам нужно разрешить какой-нибудь текстовый редактор, подобный тому, который вы ввели в этом вопросе. В этом случае вам придется частично отключить проверку запросов, чтобы разрешить использование некоторого «расширенного текста». HTML для ввода конечным пользователем. В этом случае вам придется создать какой-то механизм фильтрации белого списка.

К вашему сведению, я не знаю о других, но у Microsft есть библиотека Anti-Xss.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top