如何判断点击事件是否为假冒?

问题描述 投票:0回答:5

如何知道点击事件是否是用户生成的? (他们使用鼠标)。

相反的是由一段 JavaScript 触发的点击事件。

考虑显示广告的 JavaScript 库。您不会希望任何使用该库的人愚弄您。

您需要确保该事件不是伪造的。

javascript html dom-events
5个回答
2
投票

服务器永远无法信任客户端代码。任何人都可以打开他们的浏览器控制台并完全更改代码。

您也许可以做不同的事情来迷惑机器人或自动脚本,但如果您试图防止专门针对您的网站的伪造行为,您将无能为力。


1
投票

老实说,除非您遵循以下非常简单的建议,否则任何尝试进行防篡改都会失败:

  • 不要在客户端做任何事情,这个问题系列与安全性同源,所以你想在服务器端做所有事情而不依赖客户端上的任何东西;
  • 不要相信您收到的输入,怀疑其来源(例如用户代理、cookie、HTTP请求等,都可能被伪造成完全适合您锁孔的密钥);
  • 你并不是真的想检测鼠标点击,你想要的是区分人类和机器,所以使用常见的技术来解决这个问题;
  • 目前机器几乎不可能解决的验证码或其他任务可以让您区分真人与机器。

也就是说,最适合您的用例(广告)的是嵌入在图像中随机改变位置的浮动按钮。单击时,您发送坐标和代码,您可以使用服务器端来重建按钮的位置,从而确定坐标是否在按钮边界内。

机器会发送错误的(随机)坐标与代码,服务器端你会区分它,因为点击不在边界内。

这个解决方案显然可以增强:

  • 较大图像上的较小按钮(幸运“误报”的可能性较低);
  • 随时间移动按钮(这需要 SWF 插件或 HTML5 画布);
  • 避免可能被利用的对比度来查找图像中的按钮(例如蓝天上的红色按钮)。

您所要做的就是访问任何有广告的网站并查看它们的功能:带有微型游戏的 SWF 插件,吸引您点击它。

顺便说一句:我不喜欢网页上的广告,所以也许你最好不要实现这些东西......


0
投票

您可以检查字符串“Mouse”是否在

e.toString()
的字符串表示中找到:

document.addEventListener('click', function(e){
    console.log(e.toString().indexOf('Mouse') !== -1)
});

如果事件是由代码生成的,则

e.toString()
返回
[object Event]
,但如果它是真实的鼠标事件,它将返回
[object MouseEvent]
。我所做的就是检查“Mouse”是否在该字符串中,以确定它是否确实是真正的鼠标单击。


0
投票

你可能想尝试这样:

document.addEventListener('click', function(e){
    var w=[]["filter"]["constructor"]("return this")();//returns window, thanks to JSFuck
    console.log(e instanceOf MouseEvent && e.view==w && e.srcElement && e.srcElement.ownerDocument.parentWindow==w && e.target && e.target.ownerDocument.parentWindow==w);
});

它检查它是否是

MouseEvent
对象的实例,然后检查
window
是否相同,
e.srcElement
是否存在,是否在同一个
window
中,以及
e.target
是否存在且位于一样的
window


0
投票

Event 接口的 isTrusted 只读属性是一个布尔值,当事件由用户操作生成时为 true,当事件由脚本创建或修改或通过 EventTarget 调度时为 false .dispatchEvent().

https://developer.mozilla.org/en-US/docs/Web/API/Event/isTrusted

© www.soinside.com 2019 - 2024. All rights reserved.