Вы когда-нибудь слышали об XSS-атаках, связанных с внедрением (инъекцией) вредоносного кода в DOM (далее — DOM XSS)? Если не слышали, то Это может привести к тому, что на стороне клиента будет выполнен посторонний код. Таким образом, на стороне клиента появляется уязвимость безопасности. Злоумышленники используют объекты, позволяющие внедрять вредоносную полезную нагрузку. Вот почему такие атаки называются инъекциями. Инъекции могут происходить разными способами, например: Разумеется, нам следует принимать все возможные меры для предотвращения таких атак любой ценой. Команда Google Chrome представила Trusted Types API (далее — TTA) для решения данной проблемы. Основной причиной разработки названного интерфейса является увеличение количества XSS-уязвимостей, основанных на DOM, в сравнении с числом аналогичных уязвимостей на стороне сервера. Как доверенные типы предотвращают DOM XSS-атаки? TTA позволяет устранить саму причину возникновения проблем, связанных с XSS. По умолчанию DOM API не является безопасным. Вот несколько примеров: Во все эти сниппеты легко внедрить вредоносный скрипт или HTML. Во избежание этого TTA позволяет установить HTTP-заголовок ответа Content-Security-Policy в значение trusted-types * для допуска только доверенных типов. Это делает веб-приложение безопасным по умолчанию посредством блокировки опасных инъекций. Включить TTA можно одним из следующих способов: Директива trusted-types предписывает браузеру создавать неподдающиеся подделке типизированные значения для передачи в приемники данных (sink) DOM вместо строк.  Основная идея заключается в передаче специальных объектов вместо строк. DOM поддерживает такую передачу.  Это позволяет приемникам DOM отклонять строки и принимать только совпадающие (matching) типы. Если вы планируете использовать TTA в своем проекте, то, прежде всего, необходимо определить, где имеются соответствующие уязвимости. Проверка уязвимостей Для выполнения такой проверки добавьте следующий заголовок ответа: После этого все нарушения будут отправлены на //mysite.com/cspViolations. Это не повлияет на функциональность приложения. Отчет о нарушениях При обнаружении нарушения доверенных типов, будет отправлен отчет, настроенный с помощью report-uri. Например, если в нашем коде имеется innerHTML, отчет будет выглядеть примерно так: Это помогает определить, какие строки кода и в каком файле подвержены DOM XSS-атакам. Устранение нарушений Существует несколько способов устранения нарушений доверенных типов. Рассмотрим некоторые из них. Например, код el.innerHTML = '<img src=xyz.jpg>' может быть переписан следующим образом: Такие библиотеки, как DOMPurify могут использоваться для санитизации (обеззараживания, обезвреживания) HTML путем оборачивания разметки в объект TrustedHTML. Вместо использования библиотеки или удаления "опасного" кода, можно самостоятельно создать объект доверенных типов. Политики доверенных типов применяют правила безопасности к входным данным. Данное правило будет заменять все символы < во избежание создания новых HTML-элементов, возвращая объект политики, содержащий значение правильного типа, в данном случае TrustedHTML. При невозможности изменения кода, используемого приложением (например, при получении сторонних библиотек из CDN), можно применять политику по умолчанию: После устранения всех нарушений применение доверенных типов можно включить так: Обратите внимание на отсутствие префикса -Report-Only по сранению с предыдущим примером. В данном разделе мы рассмотрели разрешение только тех нарушений, которые связанны с HTML. Однако, TTA позволяет определять нарушения и применять правила к: Дополнительную информацию об этом можно получить здесь. Ниже представлен список преимуществ, предоставляемых использованием доверенных типов в приложении: Поддержка К сожалению, поддержка TTA браузерами оставляет желать лучшего. Будем надеяться, что это скоро изменится. В настоящее время XSS-атаки, связанные с внедрением вредоносного кода в DOM, являются очень распространенными и их количество растет с каждым днем. Обнаружение таких уязвимостей — задача не из легких. Одним из лучших решений для защиты наших приложений от XSS-атак на стороне клиента на сегодняшний день является использование TTA. Если вас интересуют другие аспекты рассмотренной темы, то вот еще одна статья, посвященная TTA. Аренда VDS-сервера с быстрыми NVMе-дисками и посуточной оплатой. Загрузка своего ISO.  JavaScript Developer