При попытке регистрации на сайте 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/")
Анализ:
cf.threat_score ge 5 and not cf.client.bot: Эта часть разумна, так как блокирует клиентов с высокой угрозой, которые не являются ботами.not http.request.version in {"HTTP/1.2" "HTTP/2" "HTTP/3" "SPDY/3.1"}: Это может быть слишком ограничительным и потенциально блокировать легитимных клиентов со старыми версиями.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)
Пояснение изменений:
- Порог оценки угрозы увеличен до 10, чтобы пропустить больше легитимного трафика.
- Блокируется только HTTP/1.0, разрешая более новые версии и SPDY.
- Проверка User-Agent изменена так, чтобы применяться только к небот-трафику, что позволяет выполнять вызовы API и работать легитимным небраузерным клиентам.
Дополнительные соображения:
- Добавьте исключения для конкретных путей или конечных точек, используемых для проверки имен пользователей:
Копировать
and not (http.request.uri.path contains "/check_username")
- Добавьте в белый список известные диапазоны IP-адресов или страны, где находится большинство ваших пользователей.
- Рассмотрите возможность внедрения ограничения скорости (rate limiting) вместо полного блокирования для некоторых условий.
Внедрение:
Замените текущее правило оптимизированной версией и отслеживайте её влияние. При необходимости корректируйте в зависимости от паттернов вашего трафика и требований безопасности.
