Сформировать одноразовые номера на балансировщиках нагрузки?

Мы пытаемся свести к минимуму попадания ботов в наш поисковый URL (то есть он не загружает форму, а просто отправляет параметры), и я думаю, что использование одноразового номера в скрытом вводе решит эту проблему, но наш администратор говорит, что балансировка нагрузки серверы могут отправлять nonce формы с одного сервера, но отправка формы может быть обработана другим сервером … поэтому я не уверен, как мы могли бы заставить это работать, и я получаю, казалось бы, нерелевантные / несвязанные результаты при поиске в сети для весь этот вопрос.

Я работал над реализацией нескольких форм nonce несколько лет назад, но все они проходили через один и тот же сервер (один был автоматически сгенерирован CakePHP, другой я не помню, как мы это сделали). Мы используем httpd с PHP 5.x на серверах CentOS 6.x, и на серверах Live есть 1 промежуточный сервер, который обслуживает запросы, а затем 10 балансировщиков нагрузки (не уверен, что это действительно имеет значение, но у них есть копия файловой системы). и код при попадании в ту же базу данных).

Администратор знаком с балансировкой нагрузки (я никогда не делал этого) и говорит, что он может быть в состоянии реализовать какое-то постоянство или использовать memcache -d или что-то подобное (я никогда не пробовал это), но я не совершенно уверен в этом.

0

Решение

Да, одноразовый номер — хороший выбор. Рабочий процесс может быть

  1. ПОЛУЧИТЬ запрос на форму
  2. Генерация случайного одноразового значения, например bin2hex(openssl_pseudo_random_bytes(16))
  3. Сохраните одноразовый номер в постоянном общем хранилище. Если вы не используете сеансы, подойдет простое хранилище значений ключей, такое как Redis или memcache.
  4. Добавьте одноразовый номер в ответ в файле cookie или в скрытой форме.
  5. Форма отправлена ​​обратно на балансировщик нагрузки. Если вы использовали cookie для одноразового номера, балансировщик нагрузки может немедленно отклонить любой запрос, пропускающий cookie. В противном случае запрос отправляется на один из веб-серверов.
  6. PHP читает nonce из формы POST или cookie. Если он отсутствует, отклоните запрос (например, 404).
  7. Проверено общее хранилище или сеанс для одноразового номера. Если он не найден, отклоните ответ. Если он найден, удалите его из хранилища (чтобы его нельзя было использовать снова) и обработайте отправку формы.
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]