OWASP виды уязвимостей для фронтенда

Судя по статистике большинство ресурсов в интернете уязвимы для различных client-side атакам. И из этого следует, что довольно не часто разработчики задумываются об угрозах. Рассмотрим некоторые виды атак для фронтенда, библиотек (фреймворков) и примеры. XSS (Cross-Site Scripting) Самая популярная уязвимость на фронтовой части т.к при попадании кода злоумышленника в ДОМ дерево и получив возможность выполнять […]

Судя по статистике большинство ресурсов в интернете уязвимы для различных client-side атакам. И из этого следует, что довольно не часто разработчики задумываются об угрозах. Рассмотрим некоторые виды атак для фронтенда, библиотек (фреймворков) и примеры.

XSS (Cross-Site Scripting)

Самая популярная уязвимость на фронтовой части т.к при попадании кода злоумышленника в ДОМ дерево и получив возможность выполнять код на стороне пользователя, можно сделать различные атаки. А на стороне клиента хранится сессия, куки, storage. и всё это становится доступным!

XSS делится на 3 части:

1. Stored XSS

Так называемое персистентное XSS — это уязвимость которая срабатывает при взаимодействии с приложением которое хранило в себе какие-либо не валидированные данные (с инъекцией JS). Например, пользователь вводит комментарий с содержимым:

<script>alert("любой js код, который будет выполняться у каждого пользователя")</script>
// в Vue.js потенциально опасный код может вызывать директива v-html
// в React.js метод dangerouslySetInnerHTML (само название говорит о себе)

И если сервер не экранирует и никак не обрабатывает введенный текст, а client side выводит как HTML, то опубликованный комментарий будет выполнять JS код. Конечно же кроме комментария, могут быть и любые другие input поля который позволяет сохранить форма на сервер.

2. Reflected XSS

Называют не персистентным XSS и уязвимость появляется на сайтах моментально на ввод пользователя. Отличие от Stored XSS, это то, что инъекция js не хранится в БД, а выводится моментально пользователю, но точно такая же в плане защиты и обработки данных введённых пользователем (защиты нету). Происходить это может как с GET, так и с POST запросами. Самый популярный пример для вывода вводимых данных является поиск на сайтах:

сайт-которому-я-доверяю.рф/page.php?search=<script>alert("Вас взломали")</script>

А как взламывают? Вам присылают на почту (куда угодно) ссылку на сайт которому вы доверяете, но у сайта не предусмотрена корректная валидация и позволяет выполнить любой JS код, как только пользователь зайдет на страницу.

DOM-Based XSS

Уязвимость связана только с DOM и наверное в настоящее время практически не встречается. Фактически это тоже как и Reflected XSS связано с URL, но не связано с сервером, а с нативным js где в теории URL (GET параметры или HASH) попадает напрямую в обработку например метода document.write или eval. И получается XSS.

<script> document.write(location.href); </script>
or
// вы перешли на url https://site.ru/#https://www.evil.net
to = location.hash.slice(1)
if (to.startsWith('https:')) {
  location = to;
}

Стоит добавить ещё к возможным уязвимостям это Web Messaging API который потенциально может получить сообщение от стороннего ресурса и если неправильно обработать.

Основные опасные методы у javascript

document.write()
document.writeln()
document.domain
element.innerHTML
element.outerHTML
element.insertAdjacentHTML
element.onevent

И основные потенциальные цели взлома в браузере:

document.URL
document.documentURI
document.URLUnencoded
document.baseURI
location
document.cookie
document.referrer
window.name
history.pushState
history.replaceState
localStorage
sessionStorage
IndexedDB (mozIndexedDB, webkitIndexedDB, msIndexedDB)
Database

Итого

Рассмотрели виды уязвимостей со стороны client side могут украсть некоторые данные, сделать так, чтобы пользователь перешел на сайт злоумышленника и в некоторых случаях подменить формы, чтобы украсть регистрационные данные.

Читайте также
Новое в DevTools (Chrome 119)
Новое в DevTools (Chrome 119)
Новое в DevTools (Chrome 119)

Кратко рассказываем какие обновления появились в DevTools (Chrome 119).

В TypeScript 5.3 добавили ​​поддержку атрибутов импорта
В TypeScript 5.3 добавили ​​поддержку атрибутов импорта
В TypeScript 5.3 добавили ​​поддержку атрибутов импорта

TS теперь включает одну опцию для определенного редактора, прежде он добавлял модификатор типа, полагаясь на настройки разработчика

C# опережает Java по популярности языка
C# опережает Java по популярности языка
C# опережает Java по популярности языка

Язык C# от Microsoft обгоняет Java в индексе популярности языка Tiobe, и эта тенденция может вскоре привести к тому, что C# превзойдет Java.

AdonisJS v6: Полный переход на современные стандарты JavaScript
AdonisJS v6: Полный переход на современные стандарты JavaScript
AdonisJS v6: Полный переход на современные стандарты JavaScript

Переход на современные стандарты Ключевое изменение в AdonisJS v6 – полная поддержка современных стандартов JavaScript: ECMAScript Modules (ESM) и TypeScript. Это обеспечивает совместимость с последними версиями пакетов и повышает безопасность благодаря доступу к актуальным исправлениям уязвимостей. Приложения AdonisJS v6 теперь по умолчанию используют TypeScript и ESM, однако разработчики по-прежнему могут устанавливать и применять пакеты, написанные […]