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

Читайте также
SortableJS переносит списки с перетаскиванием в Microsoft Blazor
SortableJS переносит списки с перетаскиванием в Microsoft Blazor
SortableJS переносит списки с перетаскиванием в Microsoft Blazor

Разработчики преобразовали SortableJS, инструмент JavaScript для создания списков с возможностью перетаскивания, в компонент Blazor для разработки веб-приложений Microsoft, переименовав его в Blazor Sortable.

CSS в 2023, что можно использовать?
CSS в 2023, что можно использовать?
CSS в 2023, что можно использовать?

Всем привет! Как фронтендер среднего уровня и частенько использующий CSS — хочу прокомментировать все новинки CSS которые вышли в этом 2023 году.

Текстовые приложения на основе Python переходят в веб
Текстовые приложения на основе Python переходят в веб
Текстовые приложения на основе Python переходят в веб

Облачный сервис Textual Cloud Service позволит запускать в веб-браузерах консоли на языке Python, которые созданы с использованием фреймворка Textual.

15 сайтов, чтобы сэкономить время CSS-разработчику
15 сайтов, чтобы сэкономить время CSS-разработчику
15 сайтов, чтобы сэкономить время CSS-разработчику

Собрали 15 сайтов, которые помогут сэкономить много времени и расширить опыт разработки CSS.