ASP.NET MVC — мини-сериал по безопасности: XSS

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

Сегодня я расскажу об уязвимостях XSS (межсайтовый скриптинг).

Я затронут?

В ASP.NET MVC по умолчанию вам не нужно беспокоиться об уязвимостях XSS, если вы явно не разрешаете отправку HTML (например, разрешаете форматированный текст в полях комментариев), и в этом случае вы должны принять меры предосторожности. и очищайте полученные данные, чтобы убедиться, что в ваше веб-приложение не внедряются какие-либо скрипты.

Если вы явно не разрешаете размещать HTML в своих моделях, и у вас не установлено значение false для параметра ValidateInput, это не повлияет на вас и вам не придется беспокоиться о каких-либо мерах предосторожности.

Итак, если вы разрешаете HTML, читайте дальше…

Неправильный способ очистки данных

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

Правильный способ очистки данных

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

HtmlSanitizer — это .NET-библиотека для очистки фрагментов HTML и документов от конструкций, которые могут привести к XSS-атакам. Он использует AngleSharp для анализа, обработки и рендеринга HTML и CSS.
Поскольку HtmlSanitizer основан на надежном синтаксическом анализаторе HTML, он также может защитить вас от преднамеренного или случайного «отравления тегов», когда неверный HTML-код в одном фрагменте может повредить весь документ, что приведет к нарушению макета или стиля.

Установить HTML-дезинфицирующее средство

Давайте начнем. Используя NuGet, вы можете установить пакет с

pm> Install-Package HtmlSanitizer 

Пример

А вот пример, демонстрирующий очистку строки, содержащей вредоносное содержимое. Вы можете видеть, как библиотека удаляет script теги, onload атрибуты и даже background-image css, которое было встроено в style атрибуты, оставляя другие свойства нетронутыми.

 HtmlSanitizer sanitizer = new HtmlSanitizer();
 string html = "<script>alert('xss')</script><div onload=\"alert('xss')\""
             + "style=\"background-color: test\">Test<img src=\"
             + "style=\"background-image: url(javascript:alert('xss')); "
             + "margin: 10px\"></div>";

 string sanitized = sanitizer.Sanitize(html, "http://www.example.com");
 Console.WriteLine(sanitized);	

Выход

<div style="background-color: test">Test<img src=" style="margin: 10px"></div>

Вы можете настроить разрешенные теги HTML, атрибуты, свойства css, схемы uri и многое другое.

Заключительные мысли

В конечном счете, лучшая безопасность — это запрет на отправку любого HTML-кода, однако, если вы собираетесь включить его, убедитесь, что вы очищаете эти отправки.

Похожие записи

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *