Подтверждение человеком без действий пользователя - PullRequest
1 голос
/ 28 апреля 2011

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

Пока не сердитесь на меня: у меня есть причина для этого: пользователи приходят в мое приложение из внешней среды, и я не могу запросить у них какой-либо дополнительный ввод (поэтому все необходимые данные находятся в GET запрос). Они должны иметь возможность закрыть окно браузера сразу после его открытия и сохранить входные данные. И нет, я не могу сделать это через AJAX, API или другой скрытый метод.

Эти требования как бы исключают капчу, расчеты, формы и т. Д. Поэтому у меня осталась проблема с тем, что я действительно хочу какой-то тип проверки, чтобы боты / сканеры не «случайно» отправили что-либо.

Одним из решений, которое я ищу, является создание очень легкой целевой страницы, которая подает себя через загрузку javascript, но это будет самой уродливой вещью в моем приложении, поэтому я пытаюсь предотвратить это. Другой способ - позволить целевой странице не выполнять какую-либо обработку, а вместо этого использовать AJAX-вызов для этого. Это, однако, означает, что старые браузеры (и многие мобильные телефоны) должны будут использовать другое решение.

Справочная информация: приложение, написанное на PHP5.3, построенное на Yii Framework, полностью совместимое с браузерами (в том числе практически для каждого мобильного телефона).

Еще немного предыстории: «Внешние среды», о которых я говорю, варьируются от почтовых клиентов до веб-сайтов. Манипулирование нашим контентом во время выполнения невозможно.

Обновление: Вот что я собираюсь сделать: я, вероятно, собираюсь объединить решения, размещенные здесь, в резервном механизме, так что будет предпринята цепочка проверок: 1. Проверка Ajax 2. Не-Ajax проверка JavaScript (автоматическая отправка формы) 3. Запрос на ввод данных пользователем (пользователь должен нажать кнопку подтверждения)

Кроме того, я собираюсь реализовать ловушку для ботов, описанную http://www.kloth.net/internet/bottrap.php

После того, как я закончу со сборкой, я обновлю пост, если я сделал что-то другое.

Ответы [ 2 ]

1 голос
/ 28 апреля 2011

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

Людиникогда не заполнит это скрытое поле, но спам-боты всегда заполняют его.Таким образом, вы можете отклонить любой запрос, если это поле не пустое.

Теперь вы должны запретить сканеры , а не только спам-ботов.Никогда этого не делал, но вот некоторые мысли.Вы можете добавить скрытый «человеческий» скрытый ввод в форму при первых событиях mouseMove (но только с клавиатуры - и подумайте о слепых людях - пользователи будут считаться роботами).Поэтому, возможно, если этого поля нет, вы можете запустить javascript «подтвердить», где вы спросите «Подтвердите, что вы робот, или нажмите« Отмена », если вы человек».Вы можете сделать свою ссылку привязки, содержащую значение по умолчанию, которое значения этого скрытого поля будут перезаписывать в js.Большинство сканеров не будут перезаписывать значения, особенно если вы должны отменить подтверждение, чтобы получить правильное поведение (и избегать подтверждения с помощью события mouseMove для большинства пользователей).

1 голос
/ 28 апреля 2011

Если вы можете изменить место, куда приходят ваши пользователи, вы можете попробовать включить контрольную сумму.Вычислите какую-то контрольную сумму или хэш всех полей в запросе GET и добавьте его в сам запрос GET (т. Е. Через javascript, но делайте это там, откуда приходят ваши пользователи, а не туда, куда они приземляются).Затем в вашем приложении отклоните все попадания с неверной контрольной суммой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...