Проверка доступности имени пользователя зависла при регистрации

При попытке регистрации на сайте https://it6.cc/ проверка доступности имени пользователя зависает. Сообщение «Проверка доступности имени пользователя…» появляется и сохраняется в течение длительного времени, что препятствует нормальному прохождению регистрации.


Я нашел причину проблемы: это правило WAF Cloudflare.
Исходное правило:

(cf.threat_score ge 5 and not cf.client.bot) or (not http.request.version in {"HTTP/1.2" "HTTP/2" "HTTP/3" "SPDY/3.1"}) or (not http.user_agent contains "Mozilla/")

Ниже приведено оптимизированное правило от Claude AI, которое решает проблему:

(cf.threat_score ge 10 and not cf.client.bot) or 
(http.request.version eq "HTTP/1.0") or 
(not http.user_agent contains "Mozilla/" and not cf.client.bot)
Пояснение изменений

Анализ и оптимизация правил брандмауэра Cloudflare

Текущее правило:

Копировать

(cf.threat_score ge 5 and not cf.client.bot) or 
(not http.request.version in {"HTTP/1.2" "HTTP/2" "HTTP/3" "SPDY/3.1"}) or 
(not http.user_agent contains "Mozilla/")

Анализ:

  1. cf.threat_score ge 5 and not cf.client.bot: Эта часть разумна, так как блокирует клиентов с высокой угрозой, которые не являются ботами.
  2. not http.request.version in {"HTTP/1.2" "HTTP/2" "HTTP/3" "SPDY/3.1"}: Это может быть слишком ограничительным и потенциально блокировать легитимных клиентов со старыми версиями.
  3. not http.user_agent contains "Mozilla/": Это может блокировать легитимные запросы от небраузерных клиентов или вызовов API.

Оптимизированное правило:

Копировать

(cf.threat_score ge 10 and not cf.client.bot) or 
(http.request.version eq "HTTP/1.0") or 
(not http.user_agent contains "Mozilla/" and not cf.client.bot)

Пояснение изменений:

  1. Порог оценки угрозы увеличен до 10, чтобы пропустить больше легитимного трафика.
  2. Блокируется только HTTP/1.0, разрешая более новые версии и SPDY.
  3. Проверка User-Agent изменена так, чтобы применяться только к небот-трафику, что позволяет выполнять вызовы API и работать легитимным небраузерным клиентам.

Дополнительные соображения:

  • Добавьте исключения для конкретных путей или конечных точек, используемых для проверки имен пользователей:

Копировать

and not (http.request.uri.path contains "/check_username")
  • Добавьте в белый список известные диапазоны IP-адресов или страны, где находится большинство ваших пользователей.
  • Рассмотрите возможность внедрения ограничения скорости (rate limiting) вместо полного блокирования для некоторых условий.

Внедрение:

Замените текущее правило оптимизированной версией и отслеживайте её влияние. При необходимости корректируйте в зависимости от паттернов вашего трафика и требований безопасности.

1 лайк