
Полная версия
Хакинг – Угрозы, Взломы, Безопасность
формой.
Форма: Форма отправляет POST-запрос на URL https://target-
website.com/change-password, который является целевым сайтом.
Скрытое поле: Поле new_password содержит новое значение пароля,
которое злоумышленник хочет установить для жертвы.
Кнопка отправки: При нажатии на кнопку "Claim Prize" форма отправляет
запрос на целевой сайт.
Когда пользователь, находясь в своем браузере и будучи авторизованным на
целевом сайте, посещает страницу злоумышленника и нажимает на кнопку,
браузер отправляет запрос на изменение пароля, включая все необходимые
аутентификационные данные.
4. Теоретический пример использования








Предположим, что пользователь А авторизован на сайте банка и имеет доступ к
своим счетам. Злоумышленник создает страницу с формой, как в примере выше,
и отправляет ссылку на эту страницу пользователю А через электронную почту,
маскируя ее под предложение о выигрыше.
Когда пользователь А открывает страницу и нажимает на кнопку, происходит
следующее:
1. Браузер пользователя А автоматически отправляет POST-запрос на сайт
банка, включая все необходимые cookies для аутентификации.
2. Сервер банка получает запрос и, не подозревая о подделке, меняет пароль
пользователя А на "hacked_password".
3. В результате злоумышленник получает доступ к аккаунту пользователя А, так
как теперь он может войти с новым паролем.
Таким образом, CSRF-атака может привести к серьезным последствиям, включая
несанкционированный доступ к учетным записям и финансовым данным
пользователей. Поэтому важно применять меры защиты, такие как CSRF-токены,
для предотвращения подобных атак.
Методы защиты от CSRF: Как предотвратить атаки?
1. Описание
Защита от межсайтовой подделки запросов (CSRF) является важной частью
обеспечения безопасности веб-приложений. Существует несколько методов,
которые помогают предотвратить такие атаки. Наиболее распространенными
являются использование CSRF-токенов, проверка заголовка "Referer", а также
реализация механизма "SameSite" для cookies. Каждый из этих методов имеет
свои особенности и может использоваться в зависимости от архитектуры
приложения и его требований безопасности.
2. Пример кода
Рассмотрим пример реализации CSRF-токена в веб-приложении на Python с
использованием фреймворка Flask:
from flask import Flask, request, session, render_template_string
import os
app = Flask(__name__)
app.secret_key = os.urandom(24)
@app.route('/form', methods=['GET'])

def form():
token = os.urandom(16).hex()
session['csrf_token'] = token
return render_template_string('''
''', token=token)
@app.route('/submit', methods=['POST'])
def submit():
if request.form['csrf_token'] != session.get('csrf_token'):
return "CSRF token is missing or invalid!", 403
# Обработка данных
return "Data submitted successfully!"
if __name__ == '__main__':
app.run(debug=True)
3. Подробный разбор кода
Импорт библиотек: Мы используем Flask для создания веб-приложения, а
также библиотеку os для генерации случайных токенов.
Создание приложения: Мы создаем экземпляр приложения Flask и
устанавливаем секретный ключ для сессий.
Маршрут /form:
Генерируется CSRF-токен с помощью os.urandom(16).hex(), который
сохраняется в сессии.
Возвращается HTML-форма, в которой токен передается как скрытое
поле.
Маршрут /submit:
При получении POST-запроса проверяется, совпадает ли токен из формы
с токеном, сохраненным в сессии.
Если токены не совпадают, возвращается ошибка 403 (доступ запрещен).
Если токены совпадают, данные обрабатываются дальше.
4. Теоретический пример использования














Предположим, что у вас есть веб-приложение для управления учетными
записями пользователей. Чтобы предотвратить CSRF-атаки, вы реализовали
механизм CSRF-токенов, как описано выше.
Когда пользователь получает доступ к форме для изменения своих данных,
сервер генерирует уникальный токен для этой сессии и включает его в форму.
Пользователь заполняет форму и отправляет ее. Сервер проверяет, что токен,
отправленный с запросом, совпадает с токеном, сохраненным в сессии.
Если злоумышленник пытается отправить поддельный запрос с другого сайта, он
не сможет получить правильный CSRF-токен, так как он не имеет доступа к
сессии пользователя. Таким образом, запрос будет отклонен, и пользователь
останется защищенным от нежелательных действий.
Кроме использования токенов, другие методы защиты, такие как проверка
заголовка "Referer" и использование атрибута "SameSite" для cookies, могут быть
внедрены в зависимости от архитектуры приложения. Например, проверка
"Referer" может быть использована для проверки, что запрос исходит из
доверенного источника, а атрибут "SameSite" помогает предотвратить отправку
cookies с кросс-доменных запросов.
Роль токенов CSRF в веб-безопасности
1. Описание
CSRF-токены (токены межсайтовой подделки запросов) – это уникальные,
случайно сгенерированные значения, которые используются для защиты веб-
приложений от атак CSRF. Токены обеспечивают дополнительный уровень
безопасности, позволяя серверу удостовериться, что запросы, поступающие от
клиента, являются легитимными и исходят от аутентифицированных
пользователей. Каждый раз, когда пользователь отправляет запрос, токен должен
быть включен в запрос, и сервер проверяет его на соответствие. Если токен
отсутствует или не совпадает, сервер отклоняет запрос.
2. Пример кода
Рассмотрим пример использования CSRF-токенов в веб-приложении на Node.js с
использованием Express и библиотеки csurf для генерации токенов:
const express = require('express');
const csrf = require('csurf');
const cookieParser = require('cookie-parser');
const app = express();


const csrfProtection = csrf({ cookie: true });
app.use(cookieParser());
app.use(express.urlencoded({ extended: true }));
app.get('/form', csrfProtection, (req, res) => {
res.send(`
`);
});
app.post('/submit', csrfProtection, (req, res) => {
// Обработка данных
res.send('Data submitted successfully!');
});
app.use((err, req, res, next) => {
if (err.code === 'EBADCSRFTOKEN') {
return res.status(403).send('CSRF token is invalid or
missing!');
}
next(err);
});
app.listen(3000, () => {
console.log('Server is running on http://localhost:3000');
});
3. Подробный разбор кода
Импорт библиотек: В этом примере мы используем express для создания
веб-приложения, csurf для управления CSRF-токенами и cookie-parser
для работы с cookies.
Создание приложения: Создается экземпляр приложения Express, и
настраивается middleware для обработки cookies и URL-кодирования.
Маршрут /form:
Используется middleware csrfProtection, который генерирует CSRF-
токен и добавляет его в запрос.










Токен передается в HTML-форме как скрытое поле с именем _csrf.
Маршрут /submit:
Этот маршрут также защищен с помощью csrfProtection, что означает,
что сервер проверяет валидность токена, отправленного с POST-
запросом.
Если токен действителен, данные обрабатываются, и пользователю
отправляется сообщение об успешной отправке.
Обработка ошибок: В случае недействительного или отсутствующего токена
возвращается ошибка 403.
4. Теоретический пример использования
Предположим, у вас есть веб-приложение для управления учетными записями
пользователей, и вы хотите защитить его от CSRF-атак. Вы внедрили механизм
CSRF-токенов, как в примере выше.
Когда пользователь открывает страницу с формой, сервер генерирует уникальный
токен и отправляет его вместе с формой. Пользователь заполняет форму и
отправляет ее. Сервер проверяет, что токен, отправленный с запросом, совпадает
с токеном, который был сгенерирован для этой сессии.
Если злоумышленник пытается отправить поддельный запрос с другого сайта, он
не сможет получить правильный CSRF-токен, так как токен привязан к сессии
пользователя и генерируется на сервере. Таким образом, запрос будет отклонен,
и пользователь останется защищенным от нежелательных действий.
Использование CSRF-токенов является одним из наиболее эффективных
способов защиты веб-приложений от атак CSRF, так как они обеспечивают
проверку подлинности запросов и помогают предотвратить несанкционированные
действия со стороны злоумышленников.
Сравнение CSRF и XSS: В чем разница?
1. Описание
Межсайтовая подделка запросов (CSRF) и межсайтовый скриптинг (XSS) – это
два различных типа атак, которые могут угрожать безопасности веб-приложений.
Несмотря на то, что обе атаки могут использоваться для выполнения
нежелательных действий, они имеют разные механизмы, цели и способы защиты.
CSRF: Атака, при которой злоумышленник заставляет аутентифицированного
пользователя выполнить нежелательное действие на сайте, на котором он
авторизован, отправляя поддельный запрос от имени пользователя.









XSS: Атака, при которой злоумышленник внедряет вредоносный скрипт в веб-
страницу, который затем выполняется в браузере других пользователей,
получая доступ к их данным или выполняя нежелательные действия.
2. Пример кода
Пример CSRF: Отправка поддельного запроса для изменения пароля
пользователя.
Пример XSS: Внедрение вредоносного скрипта на страницу.
fetch('https://target-website.com/api/user-data', {
method: 'GET',
credentials: 'include'
})
.then(response => response.json())
.then(data => console.log(data));
3. Подробный разбор кода
CSRF:
В этом примере форма отправляет POST-запрос на изменение пароля на
целевом сайте. Если пользователь аутентифицирован, сервер выполнит
действие, даже если запрос был инициирован с другого сайта.
Злоумышленник может создать страницу с этой формой и заставить
пользователя нажать на кнопку, что приведет к нежелательному
изменению пароля.
XSS:
В этом примере вредоносный скрипт отправляет GET-запрос на API
целевого сайта, чтобы получить данные пользователя.
Если скрипт успешно внедрен на страницу, он будет выполняться в
контексте браузера пользователя, что позволяет злоумышленнику
получить доступ к данным, которые могут быть защищены.









4. Теоретический пример использования
CSRF:
Предположим, у вас есть веб-приложение для управления учетными записями
пользователей. Пользователь аутентифицирован и открывает страницу,
созданную злоумышленником. На этой странице есть форма, которая отправляет
запрос на изменение пароля. Когда пользователь нажимает кнопку, запрос
отправляется на сервер, и пароль меняется на значение, указанное
злоумышленником. Защита от CSRF может быть реализована с помощью токенов
или проверки реферера.
XSS:
Представьте, что ваше веб-приложение позволяет пользователям оставлять
комментарии, но не фильтрует вводимые данные. Злоумышленник оставляет
комментарий с вредоносным JavaScript-кодом. Когда другие пользователи
открывают страницу с этим комментарием, скрипт выполняется в их браузере, и
злоумышленник получает доступ к их учетным данным. Защита от XSS включает
в себя фильтрацию и экранирование пользовательского ввода, а также
использование Content Security Policy (CSP).
Взаимосвязь между CSRF и XSS
Несмотря на различия, CSRF и XSS могут быть связаны. Например, XSS-атака
может быть использована для реализации CSRF. Если злоумышленник успешно
внедрит вредоносный скрипт с помощью XSS, этот скрипт может отправить
поддельные запросы от имени пользователя, что делает его уязвимым к CSRF.
Поэтому важно применять комплексные меры безопасности для защиты веб-
приложений от обоих типов атак.
Примеры реальных атак CSRF и их последствия
1. Описание
Межсайтовая подделка запросов (CSRF) может иметь серьезные последствия
для пользователей и компаний, подвергшихся атаке. Уязвимости CSRF позволяют
злоумышленникам выполнять действия от имени аутентифицированных
пользователей без их ведома. Это может привести к несанкционированным
транзакциям, изменению учетных данных, утечке личной информации и другим
негативным последствиям. Рассмотрим несколько известных случаев атак CSRF
и их влияние.
2. Пример кода
Хотя в данном разделе не будет конкретного кода, поскольку примеры атак CSRF
обычно не публикуются в виде кода из соображений безопасности, можно
описать, как могла быть реализована атака.
Пример атаки на веб-приложение с использованием CSRF:
1. Пользователь аутентифицирован на сайте банка.
2. Злоумышленник создает страницу с формой, которая отправляет запрос на
перевод средств на его счет.
3. При посещении этой страницы пользователем и нажатии кнопки
"Подтвердить" отправляется POST-запрос с необходимыми данными, включая
аутентификационные cookies пользователя.
3. Подробный разбор кода
Вместо кода, давайте разберем несколько примеров реальных атак:
Атака на сайт PayPal (2014):
Злоумышленник создал страницу с формой, которая отправляла запрос
на перевод денег с аккаунта пользователя на его собственный счет.
Пользователь, находясь на странице злоумышленника, нажимал кнопку, и
запрос отправлялся на PayPal, используя его аутентификационные
cookies.
В результате, пользователи теряли деньги, а PayPal столкнулся с
репутационными потерями и необходимостью усилить защиту.
Атака на GitHub (2018):
В GitHub была обнаружена уязвимость CSRF, которая позволяла
злоумышленникам изменять настройки учетной записи пользователя.
Пользователи могли случайно стать жертвами, если они открывали
вредоносные ссылки, находясь в своей учетной записи GitHub.
GitHub быстро выпустил патч для устранения уязвимости, но инцидент
продемонстрировал, насколько важно защищать свои приложения от
CSRF.
4. Теоретический пример использования
Случай с социальной сетью:
Предположим, что у вас есть социальная сеть, где пользователи могут отправлять
сообщения друг другу. Злоумышленник создает страницу с формой, которая
отправляет POST-запрос на отправку сообщения от имени пользователя.
Пользователь, находясь в своей учетной записи и открыв страницу








злоумышленника, нажимает кнопку "Отправить сообщение". Запрос выполняется,
и сообщение отправляется, даже если пользователь не хотел этого делать.
Последствия:
Пользователь может потерять контроль над своими сообщениями.
Доверие к социальной сети может быть подорвано, что приведет к потере
пользователей.
Необходимость в срочных мерах по улучшению безопасности, включая
внедрение CSRF-токенов и других методов защиты.
Заключение
Атаки CSRF могут иметь серьезные последствия как для пользователей, так и для
компаний. Изучение реальных случаев атак помогает понять важность защиты
веб-приложений и необходимость внедрения эффективных мер безопасности.
Применение CSRF-токенов, проверка реферера и других методов защиты может
значительно уменьшить риски, связанные с такими атаками.
Инструменты для тестирования на уязвимости CSRF
1. Описание
Тестирование веб-приложений на уязвимости CSRF является важным этапом
обеспечения их безопасности. Существуют различные инструменты и методы,
которые могут помочь в обнаружении уязвимостей CSRF. Эти инструменты могут
автоматически генерировать запросы, анализировать ответы сервера и выявлять
потенциальные слабости в защите веб-приложений. В этом разделе мы
рассмотрим несколько популярных инструментов для тестирования на
уязвимости CSRF и их функциональные возможности.
2. Пример кода
Хотя многие инструменты для тестирования CSRF не требуют написания кода,
можно привести пример использования одного из них – инструмента Burp Suite.
Ниже приведен пример настройки Burp Suite для обнаружения CSRF-
уязвимостей.
1. Настройка Burp Suite: