Угловая атака, межсайтовый скриптинг и процесс дезинфекции

Эта статья изначально появилась на dormoshe.io

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

В этой статье мы поймем, что такое XSS-атака, как эту атаку можно провести в приложении Angular, как Angular защищает нас и как мы можем отключить эту защиту.

Что такое XSS-атака?

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

Как можно реализовать XSS в приложении Angular?

Есть несколько способов атаковать в приложении Angular:

  • HTML - при интерпретации значения как HTML.
  • Стиль - при привязке CSS
  • URL - при использовании свойств URL.

Как Angular предотвращает эту атаку?

Чтобы заблокировать XSS-атаки, вы должны предотвратить проникновение вредоносного кода в DOM. Когда значение вставляется в DOM из шаблона через свойство, атрибут, стиль, привязку класса или интерполяцию, Angular очищает и избегает ненадежных значений.

Санитизация - это проверка ненадежного значения, превращение его в значение, которое можно безопасно вставить в DOM.

Вот объявление sanitization providers в BrowserModule

Служба очистки DOM

Цель DomSanitizer - очистить ненадежные части значений. Каркас класса выглядит так:

Как видите, существует два типа шаблонов методов. Первый - это метод bypassSecurityTrustX, который получает ненадежное значение в соответствии с использованием значения и возвращает доверенный объект (мы поговорим об этом позже). Второй - метод sanitize, который получает контекст безопасности и ненадежное значение и возвращает надежное значение. Контекст безопасности - это использование ценности.

Если значение является доверенным для контекста, этот sanitize метод развернет содержащееся безопасное значение и будет использовать его напрямую. В противном случае значение будет обработано для обеспечения безопасности в соответствии с контекстом безопасности. Вот код функции:

Центральная часть метода - блок switch-case. Значение проверено в соответствии с контекстом безопасности. Объекты SafeXImpl - это просто объекты, у которых есть getTypeName метод, позволяющий использовать instanceof функциональность.
Есть три основные вспомогательные функции для очистки значений. Функция sanitizeHtml очищает ненадежное значение HTML, анализируя значение и проверяя его токены. Функции sanitizeStyle и sanitizeUrl очищают ненадежный стиль / значение URL с помощью регулярных выражений.

Как мы можем отключить логику очистки?

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

Вызов метода bypassSecurityTrustX с ненадежными пользовательскими данными подвергает ваше приложение угрозе безопасности XSS

Примером одного из этих методов является bypassSecurityTrustHtml для значений HTML.

Мы видим интерфейсы, которые использует метод. Метод просто получает значение и возвращает значение, как оно есть в обернутом объекте.

Заключение

XSS-атаки распространены в веб-браузерах. В этих атаках жертвой является пользователь, а не приложение. В основном вредоносные значения исходят из HTML, CSS или URL. С Angular вы автоматически попадаете в безопасное место. Это выполняется дезинфицирующим средством DOM, которое очищает ненадежные значения. Вы можете отключить эту защиту Angular. Когда вы решите это сделать, обратите внимание на опасности, делайте это осторожно и разумно.

Вы можете подписаться на меня в dormoshe.io или Twitter, чтобы узнать больше об Angular, JavaScript и веб-разработке.