Как говорится в определении CSRF
Токен CSRF — это защищенный случайный токен (например, токен синхронизатора или
токен вызова), который используется для предотвращения атак CSRF. Токен нужен
быть уникальным для сеанса пользователя и иметь большое случайное значение для
затруднить угадывание. Защищенное приложение CSRF назначает уникальный
Токен CSRF для каждого сеанса пользователя.
он защищает BE, чтобы быть уверенным, что отправленное в BE сообщение поступает из формы, созданной BE, если только кто-либо не может отправить данные в BE из любого источника.
например, в форме входа хакер может написать код, чтобы попробовать несколько комбинаций (конечно, в drupal есть политика максимального количества повторных попыток, которая не позволяет пользователям вводить неправильный пароль более 5 раз, и в drupal есть обнаружение флуда, которое предотвращает атаку грубой силы ). Но тем не менее, формы без CSRF-защиты — хорошее место для ботов и спамеров, чтобы несколько раз размещать данные на стороне.
Так что лучше, если ваши формы открыты для анонимности, защитите их. горшок меда и решение для обнаружения человека (капча, Рекапча, Recaptcha 3, математическая капча и т. д.).
дополнительно, имея Модуль комплекта безопасности сделать его более безопасным.
Обновить часть после того, как я заметил, что это происходит для зарегистрированных пользователей
по причинам, которые я упомянул выше, в частности, для улучшения функций кэширования, для анонимного пользователя он не обновляется.
Но для зарегистрированного пользователя после некоторой проверки уровня кода я понял, что это не ошибка.
он генерируется на основе form_id, и пока вы не отправите форму, она будет такой же, а обновление не создаст новую. Так, form_token и form_build_id вещи, которые защищают форму от.
для справки и получить больше взглянуть на:
    // Добавляем токен на основе #token или form_id в любую форму, отображаемую для
  // аутентифицированные пользователи.Это гарантирует, что любая отправленная форма действительно
  // запрошенный ранее пользователем и защищает от межсайтового запроса
  // подделки.
  // Это не относится к формам, отправленным программно. Более того,
  // так как токены привязаны к сеансу, а формы, отображаемые анонимным пользователям,
  // скорее всего кэшированные, мы не можем назначить им токен.
  // Во время установки еще нет $user.
  // Конструкторы форм могут явно установить для #token значение FALSE при переходе на другой сайт.
  // подделка запроса не имеет отношения к форме, такой как формы поиска.
  если ($form_state
    ->запрограммировано() || isset($form['#token']) && $form['#token'] === FALSE) {
    сбросить ($ форма ['# токен']);
  }
  еще {
    $form['#cache']['contexts'][] = 'user.roles:authenticated';
    если ($пользователь && $пользователь
      ->аутентифицировано()) {
      // Генерируем общедоступный токен и заполнитель на основе идентификатора формы.
      $placeholder = 'form_token_placeholder_' . Crypt::hashBase64($form_id);
      $form['#токен'] = $заполнитель;
      $ форма ['form_token'] = [
        '#id' => Html::getUniqueId('edit-' . $form_id . '-form-token'),
        '#type' => 'токен',
        '#default_value' => $заполнитель,
        // Для обработки и проверки формы требуется это значение. Обеспечьте
        // отправленное значение формы отображается буквально, независимо от пользовательского #tree
        // и #parents устанавливаются в другом месте.
        '#родители' => [
          'форма_токен',
        ],
Справка : https://api.drupal.org/api/drupal/core%21lib%21Drupal%21Core%21Form%21FormBuilder.php/function/FormBuilder%3A%3AprepareForm/9.3.x