Меры по предотвращению уязвимости XSS (как в Twitter несколькими днями ранее)
-
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, имхо.
Другие советы
Точно так же, как вы можете сделать внедрение SQL без проблем с помощью подготовленных операторов, вы можете сделать XSS без проблем с помощью механизма шаблонов (сериализатора DOM), который выполняет аналогичные действия.
Создайте свое приложение так, чтобы весь вывод проходил через шаблонизатор. Сделать так, чтобы движок шаблонов HTML-экранировал все данные по умолчанию. Таким образом, вы получите систему, которая по умолчанию безопасна и не полагается на то, что люди (и остальная часть большой системы) будут старательно избегать использования HTML.
Я не знаю, с чем вы пишете свой код, но если вы используете asp.net, вы частично охвачены. У asp.net есть то, что они называют проверкой запросов, что, когда включено, предотвращает внедрение вредоносного скрипта через пользовательский ввод.
Но иногда вам нужно разрешить какой-нибудь текстовый редактор, подобный тому, который вы ввели в этом вопросе. В этом случае вам придется частично отключить проверку запросов, чтобы разрешить использование некоторого «расширенного текста». HTML для ввода конечным пользователем. В этом случае вам придется создать какой-то механизм фильтрации белого списка.
К вашему сведению, я не знаю о других, но у Microsft есть библиотека Anti-Xss.