Можно ли отличить click() от реального нажатия?
Всем добрый день!
Допустим, имеется некий сайт, где есть некая кнопка. Мне хочется, чтобы её нажимали только люди, а некие умельцы нажимают эту кнопку не ручками, а делают на js что-то вроде: var btn = document.getElementById('Btn') btn.click(); Вопрос - есть ли какие-то способы отличить нажатие реального человека от выполнения подобного скрипта? Для начала интересует именно простейший случай: есть только кнопка, нет никакой капчи и подобного. Заранее извиняюсь, если вопрос задал не в соответствующем разделе или он где-то обсуждался. |
Отличить можно. Но зависит от цели. В простейшем случае достаточно определить отлично ли от нуля положение курсора при событии:
<input type="button" value="button" id="Btn"> <input type="button" value="button.click()" onclick="document.getElementById('Btn').click()"> <script> var btn = document.getElementById('Btn'); btn.addEventListener('click', function(event){ alert( event.clientX|event.clientY ? 'Вручную' : 'Скриптом' ) }, false) </script> Однако эти значения можно подставить и при искусственном вызове. Далее уже идут ухищрения для каждого браузера отдельно. Например в firefox есть свойство события isTrusted - который честно говорит вызвано событие скриптом или вручную.(в IE тоже есть такое свойство, только там оно не работает:)) Если цель борьба с накруткой или подобное - лучше использовать готовые решения. |
Цитата:
А если умельцы делают клик мыши, скажем, на делфях? Эмулируя клик в духе такого: Mouse_Event(MOUSEEVENTF_ABSOLUTE or MOUSEEVENTF_LEFTDOWN, x, y, 0, 0); Mouse_Event(MOUSEEVENTF_ABSOLUTE or MOUSEEVENTF_LEFTUP, x, y, 0, 0); Есть ли тут шансы как-то такое определить? |
Vlesk, простой ответ: конечно нет. Пользователь на своём компьютере может делать что угодно и слать какие угодно данные вам. Даже вообще без браузера бинарным образом.
Сложный ответ: можно провести исследования паттернов человеческого поведения, задержек нажатия, движения курсора, типичных реакций и т.д. ит.п. На основе этих данных производить отсеивание "роботов". Но это работа не на один день, требующая хорошей команды и серьёзной теоретической подготовки. |
Цитата:
|
Паранойя. Все можно стырить, все можно нажать так что х отличишь. И "паттерны" воспроизвести и мышь и кота и все что угодно - было бы ради чего.
Насчет паттернов. Есть такая технология, ну проект короче, которой вводишь пароль методом игры в какую-то хрень непонятную. Типа у всех людей есть своя ... идиомоторика и если даже не написать авторучкой, а выссать на снегу матерное слово - то и в этом случае по почерку можно найти хулигана (Стругацкие). Как-то незаметно проявления той системы авторизации. |
Цитата:
|
Кстати да, ещё можно смотреть откуда идёт вызов:
<input type="button" value="button" id="Btn"> <input type="button" value="button.click()" onclick="document.getElementById('Btn').click()"> <script> var btn = document.getElementById('Btn'); btn.addEventListener('click', function ev(event){ alert( ev.caller ) }, false) </script>само собой тоже совершенно не надёжно.) |
Poznakomlus, эмулировать рандомный маусклик не проблема же.
|
Poznakomlus, эмулировать мышь же, напрямую. "Обычным" программированием особо не занимался, но куча софта так может. Сам периодически юзаю AutoHotkey например.
|
Часовой пояс GMT +3, время: 02:43. |