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

2022-02-08 09:43:49 +08:00
kisshere  kisshere
我尝试用 js 来追踪鼠标移动的规律来判断,但是移动端没鼠标轨迹咋判断?有没有 PC 和移动端都支持的 js 方法判断真人?
12713 次点击
所在节点   程序员  程序员
71 条回复
CaptainD
CaptainD
2022-02-08 15:18:48 +08:00
@RickyC 那么有没有可能机器也哆嗦哆嗦
shijingshijing
shijingshijing
2022-02-08 15:19:45 +08:00
点一次弹一次 captcha ,再不济点一次弹一次人脸识别,保管行。
RickyC
RickyC
2022-02-08 16:17:18 +08:00
@CaptainD 当然有可能。
但是很多网站的滑块验证,就是检测哆嗦吧。

机器哆嗦和人通常不同。
pengtdyd
pengtdyd
2022-02-08 16:21:42 +08:00
你就没有怀疑你自己的思路错了吗?????????????
krapnik
krapnik
2022-02-08 17:07:16 +08:00
isTrusted 无需无头都可以破
https://note.youdao.com/s/6P2ncGu6
herozzm
herozzm
2022-02-08 17:38:33 +08:00
headless 无头 chrome 可以模拟的鼠标移动点击,和真人一样,所以前端 js 只能制造难度,无法真正判别真人
Maskeney
Maskeney
2022-02-08 18:06:36 +08:00
@jones2000 #34 你就是提出根据手机壳颜色换壁纸的产品经理是吧
locoz
locoz
2022-02-08 18:25:22 +08:00
很简单,使用现成的安全产品...你连相关知识都没有,自己做的校验根本不可能比别人的产品还要好,随便就被破了,形同虚设。
mostkia
mostkia
2022-02-08 19:10:41 +08:00
你之前的思路可以考虑的,有一定合理性,至少能排除一部分机器人,因为机器人的高效是跳过了 UI 交互这步骤直接对目标进行访问的,可以在目标按钮被激活时使用 document.msElementsFromPoint 和 mousedown 来配合来查看指针落点是否在按钮上并且按下。当然如果原理被人家搞懂了,估计又会操作鼠标进行模拟操作,本质上不是一个维度的对抗,人家可以调用整个系统 api ,你只能困在浏览器里面,就像囚徒困境那样(任何的反机器人只是增加代码自动化操作的难度)并不是必须要一招鲜吃遍天,可以多种低成本方案结合起来用。
jones2000
jones2000
2022-02-08 19:53:27 +08:00
@Maskeney 手机壳颜色换壁纸太 low 了。 开前置摄像头,根据用户衣服更换壁纸。
neutrinos
neutrinos
2022-02-08 22:17:54 +08:00
上 honeypot
rekulas
rekulas
2022-02-08 23:10:51 +08:00
我觉得在某种意义上是可以的,首先 isTrusted 是足够可信的 @krapnik 提到的方法已经难以伪造事件,所以纯 js 很难直接模拟点击
其次无论你是基于 selenium 还是 puppeteer 还是其他的 devtools 协议工具,浏览器都会标记一些只读属性,网站可以通过判断这些属性来判断用户是否正在进行作弊
所以我能想到的唯一破解手段是中间人+浏览器控制,通过中间人篡改网站的判断逻辑,当然这可能需要大量工作量
特别是网站如果同时引入了 wasm 的话,那无疑相当于一个 app 逆向工程了,一般人难以搞定,基本可以说 99%的情况下可以判断是否真人
Rocketer
Rocketer
2022-02-08 23:43:18 +08:00
十几年的经验告诉我——技术永远解决不了作弊,只会给正常用户带来痛苦。最终解决问题的只有产品设计,让作弊者不影响自己的正常经营或者无利可图即可。
dayeye2006199
dayeye2006199
2022-02-09 03:41:59 +08:00
感觉你们的用户会很痛苦
xuanbg
xuanbg
2022-02-09 08:29:32 +08:00
按键精灵点击也不算真人的话,那就没办法了。
abc8678
abc8678
2022-02-09 08:35:59 +08:00
判断鼠标位置? https://b23.tv/av551341157/p1
kindjeff
kindjeff
2022-02-09 09:01:31 +08:00
makelove
makelove
2022-02-09 09:08:17 +08:00
@rekulas 浏览器是开源的,直接找到 isTrusted 函数顶上加一行 return true 不就玩事了
libook
libook
2022-02-09 10:53:02 +08:00
前端完全不可信,任何前端的反作弊措施了理论上都是可以被伪造绕过的,就是看针对大多情况是否可以通过分析特征来判断是否大概率是作弊行为,就这还有不低的误判率。

现在涉及到发短信验证码的基本都强制要求加人机校验了(图形验证码、滑动验证、点击验证等),也就是说没有靠谱的方案可以准确判断作弊行为,一律默认是机器人,做对了验证题才相信是人。
rekulas
rekulas
2022-02-09 10:54:38 +08:00
@makelove 是的 我也知道没有办法完全防止 但是
编译 chrome 已经能难道 90%的技术了

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

https://www.v2ex.com/t/832362

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

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

© 2021 V2EX