网页上一个按钮的点击,如何用 js 判断为真人点击?

2022-02-08 09:43:49 +08:00
 kisshere
我尝试用 js 来追踪鼠标移动的规律来判断,但是移动端没鼠标轨迹咋判断?有没有 PC 和移动端都支持的 js 方法判断真人?
13058 次点击
所在节点    程序员
71 条回复
lneoi
2022-02-09 10:58:56 +08:00
这不就是验证码要做的事情, 不单单是指弹出式主动交互的验证码
dany813
2022-02-09 11:34:42 +08:00
@musi 这个貌似不错啊
collen
2022-02-09 11:46:28 +08:00
直接火箭筒把他家炸开 看看是不是真人在操作
itechnology
2022-02-09 11:58:39 +08:00
这个根本用 js 做不到,不然为什么 12306 会有之前的各种验证图形?
yangyifan
2022-02-09 12:57:44 +08:00
我觉得这个可以拆分成好几个问题去解决。
1:检测页面是否是正常用浏览器打开。用于去排除直接发请求、无头、操控浏览器等作弊方式去访问。
2:收集被点击元素的 xpath 、重力感应等信息、Event.isTrusted 、clientX/Y 、pageX/Y 、mousemove 事件的全部数据, 对称加密加密后发送给后端。用于判断点击时是否是否是作弊行为点击
3:在落地页检测 referer 、window.performance.timing.type 等信息去判断从页面 a 到落地页面打开的方式是否正常。

甚至还可以收集浏览器指纹等信息。比如:
1:指纹信息( canvas 、webgl 、声卡)
2:判断是否是正常浏览器
3:电量信息,比如是否在充电、电量剩余百分之多少
4:检测是否对浏览器原生属性或者方法有修改。比如模拟器上的 navigator.platform 基本上都是非 arm 平台,但是可以通过注入脚本的方式去改变它,所以为了安全,一般还会去检测是否修改了当前属性。
5:通过 stu 协议检测当前的网络环境是否作弊。

还有一种是魔改 chromium 的。这类检测其实更多的是通过策略或者流量来源等方式去判断。

如果对这类问题有想法的欢迎来探讨。wv:dHl1YTA3 ( base64 )
g5tf87
2022-02-09 15:57:37 +08:00
@yangyifan

1:检测页面是否是正常用浏览器打开。用于去排除直接发请求、无头、操控浏览器等作弊方式去访问。

这一步就很难了,因为现在有很多手段可以做到不同层级的模拟浏览器,比如 nodejs 模拟环境(比直接发请求高级,有 js 执行环境,再加上 jsdom 等技术,几乎是真实浏览器了),pupeteer 修改关键对象 /属性(导致无法判断无头,webdriver 等)
Stringify
2022-02-09 16:58:42 +08:00
isTrusted + 判断点击位置的 x 、y
如果是代码 .click() 触发的话,x,y 会是按钮左上角初始位置
当然这种方式只是防君子而已,但感觉能拦住挺多了
yangyifan
2022-02-09 17:29:32 +08:00
@g5tf87 不难,而且有现成的思路。
如果阻止直接发请求的作弊方案,可以增加日志的方式,生成一些加密信息,然后把 js 混淆 就行了,后端把加密信息离线的解密出来,判断这些信息是否都合规。如果混淆逻辑自研是很难解密出来的,如果觉得混淆能解密出来的请尝试解密一下优酷的 tfstk 、l 等加密的 cookie 。

如果有 js 环境,其实有些浏览器的 api 是很难完全模拟出来的,比如 重力感应、电量、设备的 screen 信息(包含 client offset 、screen 等)至少我知道的反作弊手段如果拿 jsdom 去模拟出来是做不到。就算模拟出来了,还有判断你这些 api 是否是 [native code]。

如果只有少部分模拟不出来 js 环境,想尝试通过动态修改 js 代码的方式设置值,还可以通过给 js 代码生成 hash 值的方式判断有没有动态修改了 js 。

总而言之,从我的反作弊经验来说这些基本上都能防范到。当然,不排除有大神把这些都能解决掉。
mestrace
2022-02-11 15:22:40 +08:00
可以了解下 device finger-printing 。理论上通过浏览器的一些原信息,就能以较高的置信度判断你是在什么环境里了。理论上无头浏览器都可以检测出来的。可以看下 amiunique 。org ,这个网站能显示你当前的 dfp 。各家肯定都有类似的算法去检测设备。
另外就是 recaptcha 让用户填验证码,根据行为来判断是否为机器。
g5tf87
2022-02-14 14:43:22 +08:00
@yangyifan
是的。 你这个思路已经是商用版本了👍
目前市面上的常用反作弊产品都差不多如此实现
will800
2023-12-12 23:01:36 +08:00
@yangyifan 这样的大神估计头上只剩下 3 根毛了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://yangjunhui.monster/t/832362

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX