Рейтинг:1

обновить form_token с обновлением страницы

флаг ru

К сожалению, form_token не меняется, когда я обновляю страницы формы. Не вызывает ли это злоупотреблений и угроз безопасности? Кто-нибудь может объяснить, что Drupal делает для CSRF во всех его формах? Спасибо

Рейтинг:3
флаг cg

Как говорится в определении 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

флаг ru
Спасибо, дорогой @Yuseferi. Но мой вопрос в том, почему токен не меняется при обновлении страницы и является ли это ошибкой Drupal? Или Drupal контролирует CSRF с помощью других методов, таких как использование файлов cookie или других распространенных методов.
Yuseferi avatar
флаг cg
@reza Я считаю, что это не ошибка. потому что добавление CSRF ко всем анонимным формам вызывает некоторые проблемы с кешированием. и он намеренно не генерирует CSRF для анонимных форм. конечно, есть некоторые файлы cookie сеанса для отслеживания пользователя, но они не участвуют в отправке формы, а отправку формы можно легко имитировать с помощью сценария. по этой причине обычно сталкивался с большим количеством спама на анонимных формах.
флаг ru
Я не имею в виду анонимного пользователя.Насколько я знаю, CSRF действителен для аутентифицированных пользователей, и этот метод был создан для предотвращения несанкционированной отправки
Yuseferi avatar
флаг cg
Ответ @reza обновлен
Рейтинг:2
флаг id

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

От https://www.drupal.org/node/2319205

leymannx avatar
флаг ne
«и отдельный пользователь». Это вещь, основанная на сеансе. Вот почему он не меняется только при очистке кеша.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.