如何知道点击事件是否是用户生成的? (他们使用鼠标)。
相反的是由一段 JavaScript 触发的点击事件。
考虑显示广告的 JavaScript 库。您不会希望任何使用该库的人愚弄您。
您需要确保该事件不是伪造的。
服务器永远无法信任客户端代码。任何人都可以打开他们的浏览器控制台并完全更改代码。
您也许可以做不同的事情来迷惑机器人或自动脚本,但如果您试图防止专门针对您的网站的伪造行为,您将无能为力。
老实说,除非您遵循以下非常简单的建议,否则任何尝试进行防篡改都会失败:
也就是说,最适合您的用例(广告)的是嵌入在图像中随机改变位置的浮动按钮。单击时,您发送坐标和代码,您可以使用服务器端来重建按钮的位置,从而确定坐标是否在按钮边界内。
机器会发送错误的(随机)坐标与代码,服务器端你会区分它,因为点击不在边界内。
这个解决方案显然可以增强:
您所要做的就是访问任何有广告的网站并查看它们的功能:带有微型游戏的 SWF 插件,吸引您点击它。
顺便说一句:我不喜欢网页上的广告,所以也许你最好不要实现这些东西......
您可以检查字符串“Mouse”是否在
e.toString()
的字符串表示中找到:
document.addEventListener('click', function(e){
console.log(e.toString().indexOf('Mouse') !== -1)
});
如果事件是由代码生成的,则
e.toString()
返回 [object Event]
,但如果它是真实的鼠标事件,它将返回 [object MouseEvent]
。我所做的就是检查“Mouse”是否在该字符串中,以确定它是否确实是真正的鼠标单击。
你可能想尝试这样:
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
。