INTEGRITY Документация

Защита форм от спама и злоупотреблений (Free, Pro и Business)

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

Добавьте Turnstile в свои формы

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

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

Создание виджета Turnstile

  1. На панели управления Cloudflare перейдите к разделу Turnstile страницу.

    Перейдите в Turnstile ↗
  2. Выберите Добавить виджет.

  3. Заполните обязательные поля:

    • Имя виджета: понятное название виджета.
    • Управление именами хостов: домены, на которых будет использоваться виджет.
    • Режим виджета: выберите Managed, Non-Interactive или Invisible.
  4. (Необязательно) Настройте Поддержка pre-clearance для одностраничных приложений.

  5. Выберите Создание, чтобы сохранить виджет.

  6. Скопируйте sitekey и секретный ключ, а секретный ключ храните в защищённом месте.

Сохраните sitekey и secret key. Sitekey понадобится в клиентском фрагменте кода, а secret key потребуется для проверки на стороне сервера.

Добавьте клиентский код

Добавьте скрипт и виджет Turnstile div элемент к каждой форме, которую нужно защитить. Замените <YOUR-SITE-KEY> на sitekey из предыдущего шага.

<form id="contact-form" action="/submit" method="POST">
  <input type="text" name="name" placeholder="Name" required />
  <input type="email" name="email" placeholder="Email" required />
  <textarea name="message" placeholder="Message" required></textarea>
  <div class="cf-turnstile" data-sitekey="<YOUR-SITE-KEY>"></div>
  <button type="submit">Submit</button>
</form>

<script src="https://challenges.cloudflare.com/turnstile/v0/api.js" async defer></script>

Виджет отображается в форме и генерирует токен, когда посетитель проходит проверку. Этот токен добавляется в отправляемые данные формы как cf-turnstile-response поле.

Проверьте токен на своём сервере

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

Вызывайте Siteverify API перед обработкой любой отправки формы:

server.js
const SECRET_KEY = "<YOUR-SECRET-KEY>";

async function validateTurnstile(token, remoteip) {
  try {
    const response = await fetch(
      "https://challenges.cloudflare.com/turnstile/v0/siteverify",
      {
        method: "POST",
        headers: { "Content-Type": "application/json" },
        body: JSON.stringify({
          secret: SECRET_KEY,
          response: token,
          remoteip: remoteip,
        }),
      },
    );

    const result = await response.json();
    return result;
  } catch (error) {
    console.error("Turnstile validation error:", error);
    return { success: false, "error-codes": ["internal-error"] };
  }
}

Замените "<YOUR-SECRET-KEY>" на секретный ключ Turnstile. Конечная точка возвращает объект JSON с success поле. Обрабатывайте отправку формы только в том случае, если success это true.

Примеры проверки на PHP, Python, Java и C# см. в Проверка токена.

Ограничьте скорость запросов к конечным точкам отправки форм

Некоторые вредоносные скрипты полностью пропускают браузер и отправляют POST-запросы напрямую в конечные точки ваших форм. Application Security правила ограничения частоты запросов перехватывают эти запросы, поскольку проверка на стороне клиента выполняется только в браузере.

Определите базовую частоту запросов

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

  1. На панели управления Cloudflare перейдите к разделу Аналитика страницу.

    Перейдите в Аналитика ↗
  2. В Трафик на вкладке выберите период с непиковым трафиком или с наименьшей активностью посетителей.

  3. Используйте Добавить фильтр кнопку, чтобы ограничить результаты трафиком конечной точки вашей формы.

  4. Обратите внимание на типичную частоту запросов с одного IP-адреса. Лимит скорости должен превышать это базовое значение.

Если у вас недостаточно данных о трафике для определения базового уровня, начните с консервативного порога и скорректируйте его на основе Security Events после развёртывания.

Создание правила ограничения скорости

Создайте правило, ограничивающее количество отправок с одного IP-адреса на конечную точку формы за определённый период. Настройте путь, порог и период под ваш сайт.

  1. На панели управления Cloudflare перейдите к разделу Правила безопасности страницу.

    Перейдите в Правила безопасности ↗
  2. Выберите Создать правило и выберите Правила ограничения скорости.

  3. Введите название правила (например, «Rate limit для отправок формы обратной связи»).

  4. В разделе Когда входящие запросы соответствуют, выберите Edit expression и введите: (http.request.uri.path eq "/contact" and http.request.method eq "POST")

    Замените "/contact" на путь конечной точки вашей формы.
  5. В разделе С теми же характеристиками, убедитесь, что IP выбрано. На тарифе Free по умолчанию установлено значение IP.

  6. В разделе Когда скорость превышает, введите 5 для Запросы и выберите значение для Период. На тарифе Free выберите 10 секунд. Тарифы Pro и выше предлагают дополнительные периоды. Доступные значения по тарифам см. в Параметры ограничения скорости.

  7. В разделе Затем выберите действие, выберите действие в раскрывающемся списке Выберите действие раскрывающемся списке. На тарифе Free выберите Block. На тарифе Pro и выше Managed Challenge рекомендуется, поскольку позволяет легитимным пользователям, достигшим лимита, пройти дальше, выполнив challenge.

  8. В разделе Для продолжительности, выберите длительность действия. На тарифе Free выберите 10 секунд. Тарифы Pro и выше предлагают более длительные периоды действия. Указывает, как долго действует ограничение после срабатывания rate limit.

  9. Выберите Развернуть.

Настройка настраиваемого ответа для заблокированных запросов (Pro и выше)

Вместо отображения стандартной страницы ошибки Cloudflare при достижении лимита скорости вы можете настроить собственный ответ. Подробнее см. Создание правила ограничения скорости в панели управления.

Добавьте правила Application Security для известных паттернов злоупотреблений

Ограничение скорости запросов само по себе не отслеживает целенаправленные шаблоны атак, такие как SQL-инъекции или межсайтовый скриптинг (XSS), в полях форм. Application Security пользовательские правила и управляемые наборы правил позволяют блокировать такие специфические паттерны, нацеленные на эндпоинты ваших форм. Пользовательские правила выполняются раньше правил ограничения частоты запросов и managed rulesets в порядок выполнения.

Проверка запросов не от ботов к конечным точкам форм

Создайте пользовательское правило, которое применяет действие Challenge к POST-запросам на конечные точки ваших форм от источников, не являющихся подтверждёнными ботами.

  1. На панели управления Cloudflare перейдите к разделу Правила безопасности страницу.

    Перейдите в Правила безопасности ↗
  2. Выберите Создать правило > Custom rules.

  3. Введите название правила (например, «Challenge спам-отправок форм»).

  4. В разделе Когда входящие запросы соответствуют, выберите Edit expression и введите:

    (http.request.uri.path eq "/contact" and http.request.method eq "POST" and not cf.client.bot)

    Замените /contact на путь конечной точки формы. not cf.client.bot условие исключает проверенных ботов (например, краулеры поисковых систем) из-под действия правила.

  5. В разделе Затем выберите действие, выберите Managed Challenge.

    Начните с Managed Challenge чтобы посмотреть, какие запросы помечаются, прежде чем переключиться на Block.

  6. Выберите Развернуть.

После развёртывания проверьте Security Events чтобы проверить, срабатывает ли правило на легитимный трафик. Если легитимные пользователи получают проверку, сузьте выражение или выберите менее строгое действие.

Включите защиту от ботов

Bot Fight Mode выдаёт проверку запросам, соответствующим известным паттернам ботов, по всему вашему домену. Он доступен на всех тарифах и не требует никакой настройки, кроме включения.

  1. На панели управления Cloudflare перейдите к разделу Security Settings страницу.

    Перейдите в Настройки ↗
  2. Фильтр по Ботовый трафик.

  3. Перейдите в Bot fight mode.

  4. Включите Bot fight mode включить.

Bot Fight Mode защищает весь ваш домен без ограничений по конечным точкам. Создать исключения с помощью custom rules, чтобы обойти Bot Fight Mode, нельзя.

Отслеживайте конечные точки своих форм

После развёртывания Turnstile, правил ограничения частоты запросов и правил Application Security отслеживайте конечные точки форм, чтобы убедиться в работе правил и выявлять новые паттерны атак.

Просмотрите Security Events

Security Events показывает запросы, на которые отреагировали или которые пометили продукты безопасности Cloudflare, включая блокировки, проверки и пропуски. Отфильтруйте по путям конечных точек ваших форм, чтобы увидеть, что блокируется, а что проходит. Большое количество заблокированных или проверяемых запросов к путям форм подтверждает, что правила активны.

  1. На панели управления Cloudflare перейдите к разделу Аналитика страницу.

    Перейдите в Аналитика ↗
  2. Выберите События на вкладке.

  3. Используйте Добавить фильтр кнопку, чтобы ограничить результаты трафиком конечной точки вашей формы.

  4. Просмотрите выборочные журналы. Для каждого события проверьте:

    • Предпринятое действие: Был ли запрос заблокирован, отправлен на проверку или разрешен
    • Источник: Правило или функция, которые вызвали действие
    • IP-адрес: Генерирует ли один IP адрес большое количество событий
    • Путь URI: Нацелены ли запросы именно на конечные точки ваших форм

Если challenge получают легитимные пользователи, сузьте выражение правила или выберите менее агрессивное действие.

Настройте оповещения о событиях безопасности

Настройте уведомление, чтобы получать оповещения при необычном всплеске событий безопасности на вашем домене.

Типы оповещений, пороговые значения срабатывания и инструкции по настройке описаны в Оповещения о событиях безопасности.

Включите мониторинг клиентских ресурсов

Если на страницу с формой внедряется сторонний скрипт, он может похищать отправленные данные, включая платёжную информацию. Client-Side Security отслеживает изменения сторонних скриптов на ваших страницах и потенциальные атаки на цепочку поставок.

Чтобы включить мониторинг:

  1. На панели управления Cloudflare перейдите к разделу Security Settings страницу.

    Перейдите в Настройки ↗
  2. (Необязательно) Отфильтруйте по Злоупотребление на стороне клиента.

  3. Включите Непрерывный мониторинг скриптов.

После включения проверьте обнаруженные скрипты на странице Web assets страницу в разделе Ресурсы на стороне клиента на вкладке, чтобы выявить неожиданные скрипты на страницах с формами. Полный порядок настройки см. в Начало работы с защитой на стороне клиента.

Turnstile

Безопасность приложений

Боты

Безопасность на стороне клиента