Эффективное использование токенов Cookie и CSRF
CSRF (Подделка межсайтовых запросов) - это тип атаки, который заставляет жертву выполнять задачу в аутентифицированном веб-приложении жертвы в интересах злоумышленника. Приложение, уязвимое для CSRF, позволяет злоумышленникам выполнять любые действия от имени жертвы без его ведома.
Предположим, в настоящее время вы совершаете покупки на веб-сайте, который использует внутренние кредиты в качестве валюты. В данный момент вы вошли на сайт и просматриваете некоторые продукты. Затем вы посещаете какой-то другой сайт с новыми классными обоями для рабочего стола, не зная, что это вредоносный сайт, и нажимаете кнопку загрузки изображения.
Теперь, если владелец сайта знает, что веб-сайт магазина уязвим для CSRF -> он включит запрос на своей странице в веб-сайт магазина, который запрашивает товары для данного злоумышленника. Поскольку вы уже зашли на сайт покупок - именно вы будете запрашивать продукты по запросу злоумышленника (IP-адрес жертвы и файлы cookie). Торговые сайты, использующие внутренние кредиты, вычтут кредиты с вашего счета - без вашего ведома.
Использование токенов CSRF и cookies
Предотвращение CSRF-атак
Хорошей новостью является то, что CSRF-атаку можно легко предотвратить с помощью токена CSRF. Эта практика безопасности использует динамический непредсказуемый токен, связанный с каждым вошедшим в систему пользователем, который меняется с каждым запросом. Этот токен, как скрытое значение на веб-странице текущего сеанса браузера и отправляется вместе с каждым запросом, сделанным пользователем - Гарантируя, что только действия, выполненные на легальной странице, могут получить доступ к этому токену. Давайте рассмотрим безопасную реализацию токенов CSRF на основе форм:
- Зарегистрированный клиент запрашивает HTML-страницу, которая содержит форму.
- Сервер включает в себя два токена в ответе. Один токен отправляется как cookie для аутентификации пользователя (Cookie или XSRF-токен). Другой в скрытом поле формы.
- Когда клиент отправляет форму, оба токена должны быть проверены на стороне сервера перед обработкой запроса.
Последовательность аутентификации действий на стороне сервера должна быть следующей:
- Идентификатор пользователя должен быть получен из полученных файлов cookie и токена из информации заголовка запроса.
- Токен из Post данных/формы должен быть проверен - он принадлежит тому же пользователю, который был подтвержден на шаге 1.
- Обработайте полученную форму для аутентифицированного пользователя.
Внедрение защиты CSRF в Joomla
Joomla изначально предоставляет функции для реализации защиты от CSRF-атак. Реализация этого механизма защиты довольно проста - Joomla уже предоставляет функции для генерации непредсказуемых случайных токенов и функции для проверки их в соответствии с сессиями пользователей. Давайте посмотрим, как мы можем реализовать их для защиты нашего приложения.
Анти-CSRF-токены в Joomla отправляются с использованием форм в запросах POST. Следующий код должен быть включен на странице, чтобы создать этот токен.
<?php
echo
JHtml::_(
'form.token'
); ?>
Это сгенерирует и установит случайный токен для текущего сеанса пользователя, вошедшего в систему. Вывод вышеуказанной функции будет похож на этот.
<input type=
"hidden"
name=
"0987654321abcdef0987654321abcdef"
value=
"1"
/>
Теперь мы также должны написать код для проверки этого сгенерированного токена. Этот код должен быть написан на странице, которая обрабатывает запрос, сгенерированный на предыдущей странице.
// Проверка на подделку запроса
$this
->checkToken();
Эта проверка на достоверность токена должна быть записана так, чтобы - проверка на токен обрабатывалась до обработки фактического запроса. Это можно реализовать с помощью функции следующим образом.
JSession::checkToken()
or
die
(
'Invalid Token'
);
Где не использовать токены CSRF?
Иногда, если мы используем какую-то функциональность от третьих лиц, токены CSRF не должны использоваться - поскольку третья сторона не будет знать, какой токен CSRF отправить в ваше веб-приложение. Например, если вы используете Stripe для обработки платежей и используете их систему webhook, вам необходимо исключить Stripe webhook handler route из защиты CSRF.
Следует отметить, что запрос сценария/HTML с сайта злоумышленника обычно не имеет доступа к вашему токену XSRF или Cookie из-за контроля доступа HTTP. Это примечание особенно важно для людей, которые необоснованно отправляют заголовок Access-Control-Allow-Origin: * для каждого ответа веб-сайта, не зная, для чего он нужен, в основном для получения своего API-интерфейса с другого веб-сайта.
Защита от CSRF для пользователей
С точки зрения пользователя, предотвращение - это защита учетных данных и запрещение несанкционированного доступа к приложениям.
Лучшие практики включают в себя:
- Выходить(вылогиниться) из веб-приложений, когда они не используются.
- Не использовать опцию «Запомнить меня» на страницах входа.
- Не позволяя браузерам запоминать пароли.
- Избегайте одновременного просмотра других сайтов/приложений при входе в конфиденциальное приложение.
Комментировать статью: