В предыдущей статье я писал о последствиях для конфиденциальности данных Exif в изображениях и аудио. В этой статье мы рассмотрим метод устранения CSRF, известный как шаблон маркера синхронизации.

В этой серии я уже посвятил несколько статей CSRF и связанным с ним концепциям, но нам еще предстоит рассмотреть конкретные меры профилактики. Знание основ является ключевым, поэтому, если вам еще не нравится тема CSRF, тогда вперед и прочитайте мою статью о CSRF, прежде чем двигаться дальше.

Когда вы прочтете эту статью, вы будете знать достаточно о том, как работает простой, но эффективный шаблон токена синхронизатора, чтобы реализовать его самостоятельно. Только не забывайте золотое правило: если у вас есть доступ к фреймворку или библиотеке, реализующей эту технику за вас, используйте ее вместо того, чтобы писать механизмы безопасности с нуля.

Часть 16 | Шаблон токена синхронизатора

Как мы уже говорили ранее, CSRF-атаки направлены на то, чтобы заставить пользователей непреднамеренно отправлять запросы на другие сайты, вызывая какой-то результирующий эффект — обычно изменение состояния.

Если вы разработчик, вы можете использовать разные подходы для защиты своих пользователей от таких атак. Один из таких подходов называется шаблоном токена синхронизатора. Давайте посмотрим, как это работает.

Этот подход, пожалуй, самый популярный и широко применяемый метод смягчения CSRF. Основной принцип заключается в том, что для предотвращения обработки нежелательных запросов вашим сайтом вы строите свой сайт таким образом, чтобы он обрабатывал только те запросы, которые содержат секретное значение, которое мы называем токеном. Легальные страницы должны включать этот токен в запросы, поэтому токен должен быть для них доступен. При этом она должна быть недоступна для третьих лиц.

Способ, которым шаблон синхронизатора токенов выполняет это требование, заключается в выполнении следующих шагов:

  1. Создание уникального и предпочтительно криптографически безопасного псевдослучайного токена на сервере и предоставление его браузерам вместе с остальной частью легитимной страницы. Это гарантирует, что страница имеет доступ к токену, чтобы его можно было включить в запросы на изменение состояния. Скрытые поля формы — это обычное место для включения токена, поскольку они автоматически включают токен в отправку формы, хотя также возможны настраиваемые заголовки или другие средства передачи токена.
  2. Атрибуция сеанса пользователями сразу после посещения сайта путем установки cookie сеанса
  3. Сохранение маркера и файла cookie сеанса соответствующим образом на сервере. Это позволяет серверу выдавать уникальный токен каждому пользователю и ожидать возврата того же токена от одного и того же пользователя. Если сайт не связывает токен с пользовательскими сеансами, злоумышленники могут получить законную страницу, содержащую токен, проанализировать токен, а затем включить его во вредоносный межсайтовый запрос, который они отправляют браузерами пользователей.

Если выполнить эти шаги, токен может быть сделан доступным на стороне клиента для законных страниц, скрывая их от злоумышленников, поскольку злоумышленник не может видеть токен, который сохраняется на сервере, и не может видеть токен, который сохраняется в DOM. страницы из другого источника (вы можете прочитать мою статью о политике того же происхождения, если вам это непонятно).

И точно так же вы теперь знаете основы шаблона синхронизатора токенов!

Помимо безопасности, желательно, чтобы токен также автоматически добавлялся в запросы, чтобы не обременять ваших пользователей. Но, очевидно, он должен добавляться автоматически только в том случае, если запрос является законным. Под этим я подразумеваю, что если злоумышленник инициирует межсайтовый запрос, вы не хотите, чтобы токен автоматически включался в запрос, поскольку тогда запрос будет успешным. С другой стороны, если вы просматриваете законный веб-сайт и инициируете запрос как обычный пользователь, вы хотите, чтобы токен был автоматически включен. Это исключает куки как вариант, так как они всегда добавляются автоматически при общении с сервером… Или все же?

И, как оказалось, существует альтернативная версия шаблона синхронизатора токенов, которая использует файлы cookie. Наша следующая статья расскажет, как это работает.

Ежедневный совет:

CSRF — это настолько слабое место в веб-дизайне, что его почти всегда обрабатывают «из коробки». Если вы используете фреймворк или решение, в котором невозможно применить уже существующие библиотеки CSRF (они существуют?), желательно не создавать свои собственные, даже если это кажется простым. Вместо этого спросите себя, следует ли вам использовать решение, которое не может обеспечить даже самую базовую защиту.

Спасибо, что читаете вместе! Хотите узнать больше? Приходите прочитать мою следующую статью о технике двойной отправки файлов cookie.