Угловая атака, межсайтовый скриптинг и процесс дезинфекции
Эта статья изначально появилась на 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 и веб-разработке.