Раздел помощи SpaceWeb

Что означает ошибка «CSRF токен истек»

16 авг, 2024

CSRF (Cross-Site Request Forgery, межсайтовая подделка запроса) – это тип атаки на веб-приложения, при которой злоумышленник заставляет уже аутентифицированного пользователя выполнять нежелательные действия на сайте.  

В этой статье мы рассмотрим, что означает ошибка «CSRF токен истек» и почему она возникает.

Как работает CSRF-атака 

Межсайтовая подделка запроса работает за счет доверия веб-приложения к пользователю, который уже прошел аутентификацию. Основная цель злоумышленника – заставить браузер жертвы выполнить нежелательный запрос к доверенному сайту, используя текущую сессию пользователя. 

Как это происходит:

  1. Пользователь входит на доверенный сайт и получает сессионный токен, который хранится в его браузере в виде cookie. Он подтверждает, что пользователь аутентифицирован.
  2. Злоумышленник создает вредоносный сайт или страницу, которая содержит скрытую форму или скрипт, способный отправлять запросы на доверенный сайт от имени пользователя. 
  3. Злоумышленник привлекает пользователя на свой вредоносный сайт, отправив ему ссылку по электронной почте, в сообщении или через социальные сети.
  4. Когда пользователь переходит на вредоносный сайт, браузер автоматически отправляет подготовленный злоумышленником запрос на доверенный сайт. Поскольку пользователь уже аутентифицирован, запрос будет выполнен под его учетными данными.
  5. Доверенный сайт принимает и обрабатывает запрос, думая, что он исходит от законного пользователя. Таким образом, действия, которые запланировал злоумышленник, выполняются без ведома и согласия пользователя.

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

Что такое CSRF-token и как он работает 

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

Как работает CSRF-токен:

  1. Когда пользователь аутентифицируется на сайте, сервер генерирует уникальный CSRF-токен для этой сессии, сохраняет его в памяти или базе данных сервера, а также отправляет токен на клиентскую сторону, обычно в виде скрытого поля формы или как часть HTTP-заголовков.
  2. Сервер встраивает CSRF-токен в HTML-формы, которые отправляются пользователю, и либо включает его в скрытые поля форм, либо добавляет его к URL-адресам, которые требуют защиты. Так, все формы или запросы, которые могут изменять состояние на сервере содержат этот уникальный токен. Это позволяет серверу идентифицировать легитимные запросы, которые исходят от аутентифицированного пользователя.

Встроенный СSRF-токен может выглядеть так:

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

  1. Когда пользователь заполняет форму и отправляет её, CSRF-токен отправляется обратно на сервер вместе с остальной информацией формы.
  2. При получении запроса сервер извлекает его из запроса и сравнивает с токеном, который был сохранен для текущей сессии. Если токены совпадают, сервер считает запрос легитимным и выполняет действие. Если токены не совпадают или отсутствуют, сервер отклоняет запрос, предотвращая потенциальную CSRF-атаку.

Пример работы CSRF-token

Представим, что пользователь вошел в свой аккаунт онлайн-банка. Когда он открывает страницу перевода средств, сервер генерирует CSRF-токен и добавляет его в форму перевода как скрытое поле. Пользователь заполняет форму и отправляет запрос на перевод.

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

Почему появляются ошибки «Истек срок действия токена» или «CSRF-значение недопустимо»

Даже при авторизации на сайтах, которые защищены от атак, можно столкнуться с сообщениями об ошибке, такими как «Недопустимое CSRF-значение» или «CSRF-токены не совпадают», а также «Token expired» (с англ. «срок действия токена истек»). Такие ошибки могут отображаться как на английском, так и на русском языке. 

Обычно они возникают по следующим причинам:

  1. Если сервер по какой-то причине создает ошибочный CSRF-токен, то при проверке запросов этот токен не будет распознан как допустимый.
  2. Пользователь мог длительное время не совершать никаких действий на странице, в результате чего срок действия токена истек. Это стандартная мера безопасности, которая предотвращает использование устаревших токенов.
  3. Когда сервер отправляет новый токен, старый автоматически становится недействительным.
  4. Некоторые браузерные плагины или расширения могут блокировать отправку запросов, которые содержат CSRF-токены.
  5. Если браузеру не разрешено устанавливать файлы cookie, это может помешать корректной работе токенов.

Как исправить ошибки «Истек срок действия токена» или «CSRF-значение недопустимо»

Способ 1. Перезагрузите страницу

Чаще всего обе проблемы можно решить, просто перезагрузив страницу. Так вы инициируете новую сессию, в ходе которой сервер и браузер создадут и согласуют новый рабочий CSRF-токен.

Способ 2. Измените настройки браузера

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

Рассмотрим, как это сделать в нескольких браузерах:

Google Chrome

  1. Щёлкните на значок с тремя точками в правом верхнем углу экрана и выберите «Настройки».

  1. В левом меню найдите и откройте вкладку «Конфиденциальность и безопасность».
  2. Выберите «Cторонние файлы cookie».

  1. Найдите пункт «Сайты, которым разрешено использовать файлы cookie» и щёлкните «Добавить».
  2. Введите название нужного сайта в формате:
[*.]example.com 
  1. Нажмите «Добавить».

  1. В разделе «Посмотреть все разрешения и данные сайтов» найдите сайт, например, «sweb.ru», и удалите все связанные с ним записи.

  1. Перезагрузите браузер и вновь войдите на сайт.

Microsoft Edge

  1. Откройте меню в правом верхнем углу экрана и выберите «Настройки» (или «Параметры»).

  1. Перейдите в раздел «Файлы cookie и разрешения сайтов».
  2. Нажмите «Управляйте файлами cookie и данными сайта, а также удаляйте их».

  1. Нажмите «Добавить» рядом с пунктом «Разрешить», чтобы включить сайт в список.

  1. Введите название сайта в формате:
[*.]example.com  

  1. Вы также можете поставить флажок рядом с опцией «Включить сторонние файлы cookie на этом сайте». 
  2. Нажмите «Добавить».

  1. Перейдите во вкладку «Посмотреть все файлы cookie и данные сайта». 

  1. Удалите все данные, которые связаны с сайтом.

  1. Перезагрузите браузер.

Яндекс Браузер

  1. Щёлкните на значок с тремя линиями в верхнем углу экрана и выберите «Настройки».

  1. В левом меню выберите вкладку «Сайты» и найдите опцию «Расширенные настройки сайтов».

  1. Пролистайте вниз до раздела «Cookie-файлы» и откройте «Настройки сайтов».

  1. Нажмите «Добавить».

  1. Введите название сайта в формате:
[*.]example.com 

  1. Нажмите «Добавить».

  1. Вернитесь на предыдущую страницу и перейдите в «Cookie-файлы и данные сайтов».

  1. Удалите все данные о сайте.

  1. Перезагрузите браузер.

Opera

  1. Щёлкните на значок настроек в левой панели экрана.
  2. Выберите раздел «Безопасность», затем нажмите «Сторонние файлы cookie».

  1. В конце странице найдите пункт «Сайты, которым разрешено использовать файлы cookie» и щёлкните «Добавить».

  1. Введите название сайта в формате:
[*.]example.com 

  1. Нажмите «Добавить».

  1. Выберите опцию «Посмотреть все разрешения и данные сайтов».

  1. Удалите все данные о сайте.

  1. Перезагрузите браузер.

Safari

  1. Откройте «Настройки Safari» в верхней части экрана или с помощью сочетания клавиш Cmd + ,.
  2. Перейдите на вкладку «Конфиденциальность» и убедитесь, что параметр «Блокировать все файлы cookie» не активен.

  1. Нажмите «Управлять данными веб-сайта…».

  1. Найдите нужный сайт и удалите все связанные с ним записи.

  1. Нажмите «Готово».
  2. Перезагрузите Safari. 

Заключение

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

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