Что помогает предотвратить межсайтовый скриптинг?

A

Android

F513FA9D E73A 45D3 A78C 9DF85980F11B

Межсайтовый скриптинг (XSS) является наиболее распространенной уязвимостью, затрагивающей веб-приложения. Мы видим, что это отражено как в наших собственных данных, так и во всей отрасли. Практика показывает, что поддержка приложения без XSS по-прежнему является сложной задачей, особенно если приложение является сложным. Хотя решения для предотвращения XSS на стороне сервера хорошо известны, межсайтовый скриптинг на основе DOM (DOM XSS) является растущей проблемой. Например, в программе вознаграждений за уязвимости Google DOM XSS уже является наиболее распространенным вариантом.



Это почему? Мы думаем, что это вызвано двумя отдельными проблемами:



XSS легко ввести



DOM XSS возникает, когда один из приемников инъекций в DOM или других браузерных API вызывается с данными, контролируемыми пользователем. Например, рассмотрим этот фрагмент, который намеревается загрузить таблицу стилей для данного шаблона пользовательского интерфейса, который использует приложение:



const templateId = location.hash.match(/tplid=([^;&]*)/)[1];

// ...

document.head.innerHTML += `<link rel="stylesheet" href="./templates/${templateId}/style.css">`



Этот код вводит DOM XSS, связывая контролируемый злоумышленником источник (location.hash) с приемником внедрения (innerHTML). Злоумышленник может воспользоваться этой ошибкой, обманув свою жертву, посетив следующий URL:

https://example.com#tplid="><img src=x onerror=alert(1)>

Это легко сделать в коде, особенно если код часто меняется. Например, может быть, однажды templateId был сгенерирован и проверен на сервере, поэтому раньше это значение было достоверным? При присваивании innerHTML все, что мы знаем, это то, что значение является строкой, но следует ли ему доверять? Откуда это на самом деле?



Кроме того, проблема не ограничивается только innerHTML. В типичной среде браузера существует более 60 функций или свойств приемника, которые требуют этой осторожности. DOM API по умолчанию небезопасен и требует особого подхода для предотвращения XSS.



XSS сложно обнаружить



Приведенный выше код является лишь примером, поэтому увидеть ошибку легко. На практике источники и приемники часто доступны в совершенно разных частях приложения. Данные из источника передаются и в конечном итоге достигают приемника. Есть некоторые функции, которые дезинфицируют и проверяют данные. Но была ли названа правильная функция?



Глядя только на исходный код, трудно понять, представляет ли он DOM XSS. Недостаточно выполнить поиск файлов .js для чувствительных шаблонов. С одной стороны, чувствительные функции часто используются в различных оболочках, и реальные уязвимости выглядят примерно так.



Иногда даже невозможно определить, уязвима ли кодовая база, только взглянув на нее.



obj [prop] = templateID



Если obj указывает на объект Location и значение prop равно "href", это, скорее всего, DOM XSS, но это можно узнать только при выполнении кода. Поскольку любая часть вашего приложения может потенциально попасть в приемник DOM, весь код должен пройти проверку безопасности вручную, и рецензент должен быть очень осторожен, чтобы обнаружить ошибку. Это вряд ли произойдет.

Trusted Types - это новый API-интерфейс браузера, который может помочь устранить вышеуказанные проблемы в качестве основной причины - и на практике помочь уничтожить DOM XSS.



Доверенные типы позволяют блокировать опасные инъекционные приемники - по умолчанию они перестают быть небезопасными и не могут быть вызваны со строками. Вы можете включить это применение, установив специальное значение в заголовке HTTP-ответа Content Security Policy:



Политика безопасности контента: доверенные типы *

Затем в документе вы больше не можете использовать строки с инъекционными приемниками:



const templateId = location.hash.match (/ tplid = ([^; &] *) /) [1];

// typeof templateId == "строка"

document.head.innerHTML + = templateId //



Выдает ошибку TypeError.

Для взаимодействия с этими функциями вы создаете специальные типизированные объекты - Trusted Types. Эти объекты могут быть созданы только определенными функциями в вашем приложении, которые называются политиками доверенного типа. Примерный код «исправлено» с доверенными типами будет выглядеть так:



const templatePolicy = TrustedTypes.createPolicy ('template', {

createHTML: (templateId) => {

const tpl = templateId;

if (/^[0-9a-z-]$/.test(tpl)) {

return `<link rel =" stylesheet "href =" ./ templates / $ {tpl} /style.css ">`;

}

бросить новый TypeError ();

}

});



const html = templatePolicy.createHTML (location.hash.match (/ tplid = ([^; &] *) /) [1]);

// html instanceof TrustedHTML

document.head.innerHTML + = html;



Здесь мы создаем шаблонную политику, которая проверяет переданный параметр ID шаблона и создает результирующий HTML. Функция политики create * вызывает функцию в соответствующую пользовательскую функцию и оборачивает результат в объект Trusted Type. В этом случае templatePolicy.createHTML вызывает предоставленную функцию проверки templateId и возвращает TrustedHTML с фрагментом <link ...>. Браузер позволяет использовать TrustedHTML с приемником инъекций, который ожидает HTML-подобный innerHTML.



Может показаться, что единственным улучшением является добавление следующей проверки:



if (/^[0-9a-z-]$/.test(tpl)) {/ * разрешить tplId * /}

Действительно, эта строка необходима для исправления XSS. Тем не менее, реальные изменения более глубокие. При применении принудительных типов единственным кодом, который может представлять уязвимость DOM XSS, является код политик. Никакой другой код не может выдавать значение, которое принимают функции приемника. Таким образом, только политики должны быть проверены на наличие проблем безопасности. В нашем примере не имеет значения, откуда берется значение templateId, так как политика сначала проверяет, правильно ли оно проверено - выходные данные этой конкретной политики не представляют XSS.



Ограничительные политики



Вы заметили значение *, которое мы использовали в заголовке Content-Security-Policy? Это указывает на то, что приложение может создавать произвольное количество политик, при условии, что каждая из них имеет уникальное имя. Если приложения могут свободно создавать большое количество политик, предотвращение DOM XSS на практике будет затруднено.



Однако мы можем дополнительно ограничить это, указав белый список имен политик, например, так:



Политика безопасности контента: шаблон доверенных типов

Это гарантирует, что может быть создана только одна политика с шаблоном имени. Затем эту политику легко идентифицировать в исходном коде, и ее можно эффективно проанализировать. Благодаря этому мы можем быть уверены, что приложение свободно от DOM XSS. Хорошая работа!



На практике современные веб-приложения нуждаются в небольшом количестве политик. Основное правило заключается в создании политики, в которой код на стороне клиента генерирует HTML или URL-адреса - в загрузчиках сценариев, библиотеках шаблонов HTML или средствах очистки HTML. Все многочисленные зависимости, которые не взаимодействуют с DOM, не нуждаются в политиках. Надежные типы гарантируют, что они не могут быть причиной XSS.



Начать



Это всего лишь краткий обзор API. Мы работаем над предоставлением большего количества примеров кода, руководств и документации о том, как переносить приложения в доверенные типы. Мы считаем, что это подходящий момент для сообщества веб-разработчиков, чтобы начать экспериментировать с ним.



Чтобы получить это новое поведение на своем сайте, вам необходимо зарегистрироваться в ознакомительной версии «Надежные типы» (в Chrome 73–76). Если вы просто хотите попробовать его локально, начиная с Chrome 73, эксперимент можно включить в командной строке:



chrome --enable-blink-features = TrustedDOMTypes

или же



chrome --enable-экспериментальный-веб-платформа-функции

Кроме того, посетите chrome: // flags / # enable-эксперимент-web-platform-features и включите эту функцию. Все эти параметры включают глобальную функцию в Chrome для текущего сеанса.

Надеемся эта информация была вам полезна!
 
Похожие темы
Admin Интересно Гигантская древняя чёрная дыра угрожает перевернуть всё, что мы знаем о рождении Вселенной. Новости в сети 0
Admin Интересно Что нужно учитывать перед использованием ИИ-чатботов для медицинских советов. Новости в сети 0
Admin Интересно Утечка данных OnlyFans: хакеры утверждают, что продают 340 миллионов записей. Новости в сети 0
Admin Интересно Обход ASLR, удалённое выполнение кода и 30 дней тишины. Что известно о новой уязвимости в nginx и почему детали пока засекречены. Новости в сети 0
Admin Интересно Удалил ключ — не значит заблокировал. Исследователи Aikido выяснили, что API-ключи Google продолжают работать до 23 минут после удаления. Новости в сети 0
Admin Интересно Хакеры, нейросети и Найк Борзов. Что покажут на «Дне технологий» в московском кластере «Ломоносов» 30 мая. Новости в сети 0
Admin Интересно Журналист утверждает, что Трамп знает правду о НЛО, но пользователи Reddit сомневаются. Новости в сети 0
Admin Интересно Глава Mistral предупреждает, что у Европы осталось два года, чтобы избежать зависимости от США в сфере ИИ. Новости в сети 0
Admin Интересно Что представляет собой «ловушка Фукидида», о которой предупреждал Си Цзиньпин Трампа. Новости в сети 0
Admin Интересно Уверены, что помните логотип Apple? Попробуйте его нарисовать. Новости в сети 0
Admin Интересно Время — самая надёжная вещь во Вселенной. Физики выяснили, что это, возможно, не так. Новости в сети 0
Admin Интересно Безопасность КИИ: что изменилось и как выстроить защиту. Новости в сети 0
Admin Интересно Цифровые секты питаются нашим страхом: ученые выяснили, что делает радикалов в сети абсолютно неуязвимыми. Новости в сети 0
Admin Интересно Каждая пропущенная угроза в неделю: что 25 миллионов предупреждений говорят о низкоуровневых рисках. Новости в сети 0
Admin Интересно Пять фотографий и мощный компьютер — всё, что нужно мошеннику для создания дипфейка. Новости в сети 0
Admin Интересно Ричард Докинз признал, что ИИ может обладать сознанием. Новости в сети 0
Admin Интересно Искусственный интеллект уже внутри вашей сети. Вы знаете, что он делает?. Новости в сети 0
Admin Интересно 100000 долларов за кроссовки. Рассказываем, что может пойти не так, если доверить покупки искусственному интеллекту. Новости в сети 0
Admin Интересно Власть, влияние, убеждение. Что общего у карьерных амбиций психопатов и нарциссов. Новости в сети 0
Admin Интересно Что скрыто за вымогательством: как работает индустрия ransomware. Новости в сети 0
Admin Интересно Нужен созвон в Zoom? Сканируй глаза и докажи, что ты не робот. Tinder тоже хочет внедрить эту технологию. Новости в сети 0
Admin Интересно Частица, которая спасла бы физику. Стерильное нейтрино искали 30 лет — как жаль, что оно оказалось миражом. Новости в сети 0
Admin Интересно Два криптографа поспорили на $5000: что сломается первым — старая защита интернета или новая. Новости в сети 0
Admin Интересно Ubuntu просит 6 ГБ, Windows 11 — 4 ГБ. Что это значит на самом деле — и кто из них честнее с пользователем. Новости в сети 0
Admin Интересно Что изменилось в списке самых популярных паролей мира. Новости в сети 0
Admin Интересно Чат-боты чаще соглашаются с пользователями, чем люди, что может усиливать конфликты. Новости в сети 0
Admin Интересно 43% сотрудников опасаются, что ИИ лишит их работы. Как страх увольнения убивает эффективность бизнеса. Новости в сети 0
Admin Интересно Что такое SaaSpocalypse и почему облачные гиганты боятся, что клиенты начнут писать код сами. Новости в сети 0
Admin Интересно В systemd добавили проверку возраста, что вызвало споры в Linux-сообществе. Новости в сети 0
Admin Интересно Физики доказали, что теория струн — единственный способ избежать краха законов Вселенной. Новости в сети 0
Admin Интересно Штраф до 1,5 млн и срок до пяти лет. Что ждет майнеров криптовалюты, которые не зарегистрируются в реестре. Новости в сети 0
Admin Интересно Ваш сервер заговорил по-турецки и шлет эмодзи – первые признаки того, что все данные уже украли. Новости в сети 0
Admin Интересно Физики впервые увидели, что запускает плоские зоны в квантовых материалах. Новости в сети 0
Admin Интересно Обычный видеозвонок, обычный установщик, обычный бэкдор. Хакеры снова напомнили, что доверять корпоративному серверу — не то же самое, что доверять ве Новости в сети 0
Admin Интересно Капча с двойным дном. Как обычное подтверждение, что вы не робот, превращается в установку шпиона. Новости в сети 0
Admin Интересно Один SQL-запрос и вы в чужом облаке. Что известно об атаке LeakyLooker на инфраструктуру Google. Новости в сети 0
Admin Интересно Никаких зависаний на AMD и «умное» облако: что нового в FreeBSD 14.4. Новости в сети 0
Admin Интересно Проект на GitHub утверждает, что Wi-Fi может видеть сквозь стены. Разработчики сомневаются. Новости в сети 0
Admin Интересно Root-права в подарок. Cisco подтвердила, что свежие баги вовсю используют для атак. Новости в сети 0
Admin Интересно 54000 банковских карт и €10 миллионов прибыли. Что известно о взломе крупнейшего торрент-трекера Франции. Новости в сети 0
Admin Интересно Неделя на исправление и публичный скандал. Белый хакер доказал, что сквозное шифрование можно взломать.. Новости в сети 0
Admin Интересно ИИ раскрыл тайну древнего камня: что скрывали римляне. Новости в сети 0
Admin Интересно 150 взломов, а в архивах — пусто. Что не так с «грозными» хакерами из 0APT. Новости в сети 0
Admin Статья Как понять что в файле склейка Вирусология 0
Admin Интересно Не просто нашел дыру, но объяснил что править. Positive Technologies встроила LLM в облачный анализатор PT BlackBox Scanner. Новости в сети 0
Admin Интересно Доказали, что вы не робот? Теперь это значит, что вы только что сами установили себе вирус. Новости в сети 0
Admin Интересно Прощай, RSA? США официально признали, что старое шифрование скоро «превратится в тыкву». Новости в сети 0
Admin Интересно Хакер думал, что украл пароль, а на самом деле – позвонил в полицию. На GitHub учат, как развести взломщика на эмоции (и логи). Новости в сети 0
Admin Статья Находим то, что не индексируется. OSINT 1
Admin Статья Что такое UDP и какая его роль в работе современных антидетект браузеров? Анонимность и приватность 0

Название темы