Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 05.11.2014, 10:48
Новичок на форуме
Отправить личное сообщение для Vlesk Посмотреть профиль Найти все сообщения от Vlesk
 
Регистрация: 05.11.2014
Сообщений: 4

Можно ли отличить click() от реального нажатия?
Всем добрый день!
Допустим, имеется некий сайт, где есть некая кнопка. Мне хочется, чтобы её нажимали только люди, а некие умельцы нажимают эту кнопку не ручками, а делают на js что-то вроде:

var btn = document.getElementById('Btn')
btn.click();


Вопрос - есть ли какие-то способы отличить нажатие реального человека от выполнения подобного скрипта?

Для начала интересует именно простейший случай: есть только кнопка, нет никакой капчи и подобного.

Заранее извиняюсь, если вопрос задал не в соответствующем разделе или он где-то обсуждался.
Ответить с цитированием
  #2 (permalink)  
Старый 05.11.2014, 12:23
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,199

Отличить можно. Но зависит от цели. В простейшем случае достаточно определить отлично ли от нуля положение курсора при событии:
<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 тоже есть такое свойство, только там оно не работает)
Если цель борьба с накруткой или подобное - лучше использовать готовые решения.
__________________
29375, 35

Последний раз редактировалось Aetae, 05.11.2014 в 12:27.
Ответить с цитированием
  #3 (permalink)  
Старый 05.11.2014, 14:26
Новичок на форуме
Отправить личное сообщение для Vlesk Посмотреть профиль Найти все сообщения от Vlesk
 
Регистрация: 05.11.2014
Сообщений: 4

Сообщение от Aetae Посмотреть сообщение
Отличить можно. Но зависит от цели. В простейшем случае достаточно определить отлично ли от нуля положение курсора при событии:
<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);

Есть ли тут шансы как-то такое определить?
Ответить с цитированием
  #4 (permalink)  
Старый 05.11.2014, 14:45
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,199

Vlesk, простой ответ: конечно нет. Пользователь на своём компьютере может делать что угодно и слать какие угодно данные вам. Даже вообще без браузера бинарным образом.

Сложный ответ: можно провести исследования паттернов человеческого поведения, задержек нажатия, движения курсора, типичных реакций и т.д. ит.п. На основе этих данных производить отсеивание "роботов". Но это работа не на один день, требующая хорошей команды и серьёзной теоретической подготовки.
__________________
29375, 35
Ответить с цитированием
  #5 (permalink)  
Старый 05.11.2014, 14:48
Новичок на форуме
Отправить личное сообщение для Vlesk Посмотреть профиль Найти все сообщения от Vlesk
 
Регистрация: 05.11.2014
Сообщений: 4

Сообщение от Aetae Посмотреть сообщение
Vlesk, простой ответ: конечно нет. Пользователь на своём компьютере может делать что угодно и слать какие угодно данные вам. Даже вообще без браузера бинарным образом.

Сложный ответ: можно провести исследования паттернов человеческого поведения, задержек нажатия, движения курсора, типичных реакций и т.д. ит.п. На основе этих данных производить отсеивание "роботов". Но это работа не на один день, требующая хорошей команды и серьёзной теоретической подготовки.
Понял, большое Вам спасибо за ответы!
Ответить с цитированием
  #6 (permalink)  
Старый 05.11.2014, 18:40
Профессор
Отправить личное сообщение для kostyanet Посмотреть профиль Найти все сообщения от kostyanet
 
Регистрация: 23.10.2010
Сообщений: 2,719

Паранойя. Все можно стырить, все можно нажать так что х отличишь. И "паттерны" воспроизвести и мышь и кота и все что угодно - было бы ради чего.

Насчет паттернов. Есть такая технология, ну проект короче, которой вводишь пароль методом игры в какую-то хрень непонятную. Типа у всех людей есть своя ... идиомоторика и если даже не написать авторучкой, а выссать на снегу матерное слово - то и в этом случае по почерку можно найти хулигана (Стругацкие).

Как-то незаметно проявления той системы авторизации.
Ответить с цитированием
  #7 (permalink)  
Старый 05.11.2014, 18:42
Профессор
Отправить личное сообщение для kostyanet Посмотреть профиль Найти все сообщения от kostyanet
 
Регистрация: 23.10.2010
Сообщений: 2,719

Сообщение от Vlesk
а делают на js что-то вроде:
Грамотные смотрят что там вызывается и вызывают сразу то, что вызывается. Незачем нажимать даже.
Ответить с цитированием
  #8 (permalink)  
Старый 05.11.2014, 20:38
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,199

Кстати да, ещё можно смотреть откуда идёт вызов:
<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>
само собой тоже совершенно не надёжно.)
__________________
29375, 35

Последний раз редактировалось Aetae, 05.11.2014 в 20:42.
Ответить с цитированием
  #9 (permalink)  
Старый 05.11.2014, 22:30
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,199

Poznakomlus, эмулировать рандомный маусклик не проблема же.
__________________
29375, 35
Ответить с цитированием
  #10 (permalink)  
Старый 05.11.2014, 22:44
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,199

Poznakomlus, эмулировать мышь же, напрямую. "Обычным" программированием особо не занимался, но куча софта так может. Сам периодически юзаю AutoHotkey например.
__________________
29375, 35
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Можно ли посылать нажатия клавиш контролу? Vornic Элементы интерфейса 1 21.12.2012 05:54
можно ли с помощью js написать код для симуляции нажатия на клавиш. KamalovRadik Мобильный JavaScript 7 17.02.2012 20:27
live click выполняется несколько раз hara jQuery 9 09.06.2010 09:58
Как можно избавится от повторного нажатия? ssh AJAX и COMET 4 23.02.2010 17:52