addeventlistener для «нажатия клавиши» = альтернатива капче?

Прав ли я, думая, что спам-боты не могут имитировать событие «нажатие клавиши», и, следовательно, я не могу получить спам, если мне требуется нажатие клавиши для каждого поля в моей контактной форме, прежде чем я смогу отправить его?

Является ли это хорошей альтернативой капче и т. д., если мне все равно, включен ли у моих зрителей JavaScript?

Волшебники, поправьте меня.


person jsejcksn    schedule 10.11.2010    source источник


Ответы (2)


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

Однако я не думаю, что у них возникнут проблемы с простым выполнением element.onkeypress() напрямую. Если бот может определить, что ему нужно нажать клавишу для продвижения вперед, то на самом деле это сводится к тому, что необходимо вызвать определенный метод обработчика событий, и бот может сделать последнее. Он также может создать свой собственный поддельный объект Event, содержащий код ключа, а затем передать его и/или установить на window.event.

Теоретически вы можете обнаружить это, очень строго следя за объектом события в своем обработчике. Я не думаю, что бот сможет легко создать нативный эквивалентный объект события, поэтому, возможно, проверив цепочку прототипов, вы сможете различить их. Однако это почти наверняка будет слишком хрупким для общего использования и не будет надежно работать в разных браузерах/средах/плагинах/и т. д.

Таким образом, я не думаю, что это плодотворный путь, потому что вы не можете сказать в обработчике событий, является ли событие «настоящим» или нет. Собственный код браузера отличается, поскольку боты не могут на самом деле инициировать событие щелчка, но в Javascript я не вижу простого способа предотвратить простой вызов вашего метода.

person Andrzej Doyle    schedule 10.11.2010
comment
Когда вы говорите, что бот не может инициировать событие клика, вы имеете в виду, что использование кнопки onClick вместо кнопки отправки защитит меня? - person jsejcksn; 10.11.2010
comment
Я имею в виду, что (кроме IE) нет способа имитировать фактическое событие клика в Javascript. Конечно, вы можете попытаться выяснить, какими должны быть эффекты, и реализовать их (например, получить элемент href ссылки и перейти к нему). Но вы не можете сказать «эй, браузер, я только что нажал здесь» — примите соответствующие меры сейчас. Итак, чтобы ответить на ваш вопрос, вероятно, нет; бот может просто вручную запустить button.onClick(). - person Andrzej Doyle; 11.11.2010
comment
@AndrzejDoyle как насчет движения мышью? - person Shane; 03.04.2013
comment
@Shane Все в моем ответе в равной степени относится к любому нативному событию/слушателю JS. Это по-прежнему просто функции, и вызвать element.onmousemove() не сложнее, чем element.onkeypress(). - person Andrzej Doyle; 09.04.2013
comment
@AndrzejDoyle ваше право. И я узнал за последние пару дней, что скрипт для этих ботов использует его после тестирования на недавнем сайте. - person Shane; 09.04.2013

Текущие реализации спам-ботов могут быть не в состоянии сделать это. Но не так уж сложно имитировать нажатия клавиш. Если у вас всего лишь небольшой веб-сайт, автор бота может не выполнить работу, чтобы обойти вашу систему, но если он достаточно велик, чтобы автор мог позаботиться о вашей системе, она очень быстро выйдет из строя.

person CodesInChaos    schedule 10.11.2010