LINUX.ORG.RU

ты человек или машина?

 


2

1

есть к примеру некий QLineEdit (поле для ввода текста на неком гуе)
туда вводят некий текст. И очень важно для бизнес процессов чтобы этот текст вводил человек. Именно вводил, не копипастил и т.п.
Сделал перехват хоткеев от копипаста (CtrlV и ShiftInsrt). Робит. Но есть подозрения что при запуске на оффтопе есть тулзы для автовставки текста в это текстовое поле.
Стал смотреть в строну QKeyEvent (событие нажатия клавиши). И считать дельту времени между каждым нажатием. И оттуда смотреть вставили или ввели. Опытным путем выявил что дельта может быть меньше 5 мс.
И вот тут вопросы, в правильном ли я направлении копаю? Ведь по идее можно и имитировать ввод, просто вставляя по символу с интервалом >5мс. Есть ли методы противостояния автоматическому вводу, без усложнения работы юзера (капча и т.п.)?

зы: нет тега antibot

А потом ты спросишь как отлавливать механических роботов которые распознают экран и жмут клавиши на клавиатуре.

Trashman ()

И очень важно для бизнес процессов

Не важно, не обманывай себя и не занимайся хернёй

anonymous ()

Не делай этого. Серьёзно.

Miguel ★★★★★ ()

Ну например, у человека на руках в среднем 10 пальцев, а клавиш на клавиатуре сильно больше, следовательно можно выявить паттерны отношений дельт для каждой раскладки – пальцы-то нужно от одной клавиши к другой переносить. Собираешь данные, строишь модель и вперед.

mix_mix ★★★★★ ()

без усложнения работы юзера

А что если я юзер, которому удобно копипастить? Или у которого есть автозаполнялка формочек? Ты усложнишь мне работу.

Не надо так.

ilammy ★★★ ()

А что за среда исполнения? Она тебе подконтрольна?

Смотри какую идею я тебе даю: что если работать с клавиатурой через libusb, прям на низком уровне, чтоб уж точно ничто не подменило. А может есть возможность создать свою клавиатуру, заменив в ней контроллер на свой собственный?

Просто любопытно, зачем такая задача? Софт для приема экзаменов каких-то? Типа как в ГИБДД?

I-Love-Microsoft ★★★★★ ()
Ответ на: комментарий от ilammy

Или хотя бы, ради бога, не мешай при этом формочку сабмитить, съедая буквы, очищая поле, или показывая какие-то дурацкие попапы: «Вы, похоже, бот. Можно, пожалуйста, помедленнее? Я записываю...» Просто проставь скрытый флажок «возможно заполнено автоматически» и всё.

ilammy ★★★ ()
Ответ на: комментарий от ilammy

Если кажется, нужно показывать капчу и немного бампать трешхолд.

mix_mix ★★★★★ ()
Ответ на: комментарий от ilammy

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

CopyPastMan ()
Ответ на: комментарий от Miguel

у меня железная карма. да и поэтому хочу без капчи обойтись. собирать инфу, а потом уже специальные люди будут думать специальные мысли и делать специальные выводы.

CopyPastMan ()
Ответ на: комментарий от CopyPastMan

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

Miguel ★★★★★ ()

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

slapin ★★★★★ ()
Последнее исправление: slapin (всего исправлений: 1)
Ответ на: комментарий от slapin

К счастью, не заработает. Потому что один десятипальцевым методом печатает, другой — двумя указательными, у третьего Дворак.

Miguel ★★★★★ ()
Ответ на: комментарий от Miguel

Ну можно смотреть задержки в нажатии 3 клавиш последовательно. Я когда-то что-то такое делал, но это была просто защита от подбора, и критерием там было, чтобы задержки между близкими буквами были в среднем меньше, чем между дальними при задержке < 3ms, но копипастить можно было по средней кнопке.

slapin ★★★★★ ()

Есть ли методы противостояния автоматическому вводу, без усложнения работы юзера (капча и т.п.)?

Нету. Обходится элементарным макросом.

anonymous ()
Ответ на: комментарий от slapin

Да чтоб в каждом батоне был датчик температуры, да и то однажды терминаторы будут иметь теплые манипуляторы )))))

I-Love-Microsoft ★★★★★ ()

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

Кстати ещё можно сделать поле не редактируемым, но с привязанной экранной клавиатурой.

DELIRIUM ☆☆☆☆☆ ()
Последнее исправление: DELIRIUM (всего исправлений: 1)
Ответ на: комментарий от DELIRIUM

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

slapin ★★★★★ ()

Я машина.

А ты занимаешься бесполезными вещами. Лучше работай над юзабилити.

Deleted ()
Ответ на: комментарий от DELIRIUM

мышкой рисуют буковки, а ты через tesseract

поле не редактируемым, но с привязанной экранной клавиатурой

Лорчую этого господина, мысля хороша.

I-Love-Microsoft ★★★★★ ()
Ответ на: комментарий от DELIRIUM

Кстати ещё можно сделать поле не редактируемым, но с привязанной экранной клавиатурой.

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

peregrine ★★★★★ ()
Ответ на: комментарий от peregrine

А буквы чтобы случайным образом на ней размещались и искажались по типу каптчи,

У меня такая клава на ондроеде стояла :D

anonymous ()
Ответ на: комментарий от Rastafarra

, пообещать лям тому кто взломает, как Аладьин за ХАСП, да.

Redf ()

CopyPastMan
хочет чтобы копипаст не работал

И вообще не надо так. Сомнительные решения для сомнительного функционала никому не нужны.

omnomnomnus ()

100% рабочего решения не будет (например есть геймерские клавиатуры с полностью софтверным управлением с загружаемыми скриптами которые могут прямо в USB порт слать команды нажатия клавиш по некоторому загруженому скрипту), поэтому нужно ограничится соотношением затраченное время / полученый результат.

На самом QT защитится от софта не получится, нужно спускатся на уровень OS и например для windows блокировать сообщения которые были сгенерированы через sendinput или PostMessage.

Но еще существуют всякие прелоадеры которые могут встраиватся в ваше ПО, чтобы защитится от них нужно будет писать свой драйвер, но и защиту на уровне драйвера можно обойти другим драйвером, вобщем стоит взвесить все ЗА и против и возможно ограничится блокирование вставки из буфера обмена.

zaz ★★★★ ()

Под оффтопиком насколько я знаю есть изкоробочная поддержка автотестирования gui. Qt как хорошая либа, видимо её поддерживает. А если и нет, то в любое стандартное окно ввода (а за QLineEdit под оффтопиком вроде до сих пор скрывается стандартное окно), можно послать текст с помощь отправки соответствующего оконного сообщения.

Т.е. тебе нужно встраиваться в нативный event loop, что бы иметь возможность детектировать альтернативные способы ввода, но сиё тоже не есть гарант успеха, т.к. можно переписать текст окна из ядерного кода прямо в память...

Альтернатива - реализовать свой lineEdit который рисуется вручную и не поддерживает всякие WM_TEXT и прочее.

pon4ik ★★★★★ ()
Последнее исправление: pon4ik (всего исправлений: 1)
Ответ на: комментарий от pon4ik

Толку от такой альтернативы? Под офтопиком для задротовгеймеров есть туева хуча кликеров, многие весьма навёрнуты, и без перехвата в системе всего и вся фиг что получится сделать нормально. А так даже «нейросетевой» анализ «спектра» нажатий и БД с сохранёнными результатами будут обходится комбинациями ГСЧ с различными «гармоничными или не очень» помехами, чтобы тот-же ГСЧ было не так-то просто отловить... Да даже банальную запись ввода пользователя с внесением «случайных поправок» уже отследить практически нереально, либо ты рискуешь нормальных пользователей через раз посылать на йух.

yyk ★★★★★ ()

Отличный тред-детектор.

libusb
на низком уровне
реальная задача
специальные люди
opencv
геймерские клавиатуры
можно переписать текст окна из ядерного кода прямо в память...
паст запрещен

Анус себе запретите, например, идиоты бессмысленные.

будете платить зарплату, буду исполнять ваши задачи.

Вся суть, ага.

anonymous ()

Ведь по идее можно и имитировать ввод, просто вставляя по символу с интервалом >5мс

Это гораздо сложнее чем просто набрать и т.о. эквивалентно «чтобы этот текст вводил человек».

Кроме того, а разве копипаста вызывает QKeyEvent?

no-such-file ★★★★★ ()

Они что, копипастят по одной букве? Если нет, то одновременная вставка больше одного символа разве не позволит детектировать не ручной ввод?

orm-i-auga ★★★★★ ()

Машинное обучение спасет тебя.

Solace ★★ ()

Но есть подозрения что при запуске на оффтопе есть тулзы для автовставки текста в это текстовое поле

А что, вводимое значение фиксированное и заранее известное? Тогда можешь не мучиться - от клавиатурных макросов тебя ничто не спасёт, т.к. они аппаратно имитируют ввод, можно и с рандомными интервалами между нажатиями.

no-such-file ★★★★★ ()
Ответ на: комментарий от CopyPastMan

Смотри комментарии, особенно от товарища zaz.

Суть в том, что что бы детектировать всё-всё тебе придётся вложить пару мильёнов вечно зелёных. И по ляму в год на поддержку ещё потом. И всё равно будут находиться диссиденты, если это кому то окажется надо.

pon4ik ★★★★★ ()
Ответ на: комментарий от no-such-file
bool MyClass::eventFilter(QObject *target, QEvent *event){
QKeyEvent *key_event = static_cast<QKeyEvent*>(event);
	if (key_event->key()==Qt::Key_V && key_event->modifiers() & Qt::ControlModifier){
		return true;
    }
    else if (key_event->key()==Qt::Key_Insert && key_event->modifiers() & Qt::ShiftModifier){
		return true;
      }
	  return false;
	  } 

в основном длинная фиксированна. например некий idшник
orm-i-auga это первое что я собираюсь сделать
Solace хочу видеть реально работающий код, потому что не встречал вещей по этой теме которые можно в продакшн.

CopyPastMan ()
Ответ на: комментарий от anonymous

Анус себе запретите, например, идиоты бессмысленные

Кому то злой админ с утра закрыл вконтактик?

pon4ik ★★★★★ ()
Ответ на: комментарий от pon4ik

никто и не говорил про всё-всё. это просто как разговор студентов. хотел услышать полезные практики и взять парочку на вооружение. особенно в разрезе кьюта.

CopyPastMan ()

А потом приду я с кастомным драйвером «клавиатуры» и подсовыванием задержек. Да, ботоводил для одной хреновины.

Ты лучше скажи - что ты пытаешься сделать? А то может найдём менее человеконенавистнический вариант.

alex4321 ()

Рисуешь экранную клавиатуру на которой порядок символов меняется при каждом запуске. И ловишь ввод только с неё. Это самый простой и надежный способ сделать то что ты хочешь.

Чуть сложнее - продавать свои клавы с криптованным протоколом.

Невыполнимый - дать пользователю вводить данные как ему удобнее и наказывать административно за копипасту.

ya-betmen ★★★★★ ()
Ответ на: комментарий от ya-betmen

Рисуешь экранную клавиатуру на которой порядок символов меняется при каждом запуске. И ловишь ввод только с неё. Это самый простой и надежный способ сделать то что ты хочешь.

Причем клавиши круглые под любым случайным углом вращения от 0 до 360 градусов на фоне картинок >:)

Чуть сложнее - продавать свои клавы с криптованным протоколом.

Я предлагал, там сторонние компы, это не вариант.

I-Love-Microsoft ★★★★★ ()
Последнее исправление: I-Love-Microsoft (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.