Для системы, над которой я работаю, у меня есть небольшая проблема: я перебираю одно из основных правил HTTP и разрешаю пользователям публиковать данные через запрос GET.
Пока не сердитесь на меня: у меня есть причина для этого: пользователи приходят в мое приложение из внешней среды, и я не могу запросить у них какой-либо дополнительный ввод (поэтому все необходимые данные находятся в GET запрос). Они должны иметь возможность закрыть окно браузера сразу после его открытия и сохранить входные данные. И нет, я не могу сделать это через AJAX, API или другой скрытый метод.
Эти требования как бы исключают капчу, расчеты, формы и т. Д. Поэтому у меня осталась проблема с тем, что я действительно хочу какой-то тип проверки, чтобы боты / сканеры не «случайно» отправили что-либо.
Одним из решений, которое я ищу, является создание очень легкой целевой страницы, которая подает себя через загрузку javascript, но это будет самой уродливой вещью в моем приложении, поэтому я пытаюсь предотвратить это. Другой способ - позволить целевой странице не выполнять какую-либо обработку, а вместо этого использовать AJAX-вызов для этого. Это, однако, означает, что старые браузеры (и многие мобильные телефоны) должны будут использовать другое решение.
Справочная информация: приложение, написанное на PHP5.3, построенное на Yii Framework, полностью совместимое с браузерами (в том числе практически для каждого мобильного телефона).
Еще немного предыстории: «Внешние среды», о которых я говорю, варьируются от почтовых клиентов до веб-сайтов. Манипулирование нашим контентом во время выполнения невозможно.
Обновление: Вот что я собираюсь сделать: я, вероятно, собираюсь объединить решения, размещенные здесь, в резервном механизме, так что будет предпринята цепочка проверок:
1. Проверка Ajax
2. Не-Ajax проверка JavaScript (автоматическая отправка формы)
3. Запрос на ввод данных пользователем (пользователь должен нажать кнопку подтверждения)
Кроме того, я собираюсь реализовать ловушку для ботов, описанную http://www.kloth.net/internet/bottrap.php
После того, как я закончу со сборкой, я обновлю пост, если я сделал что-то другое.