我怎么知道点击事件是否是伪造的?

时间:2014-09-23 04:07:46

标签: javascript html javascript-events

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

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

在显示广告的javascript库中思考。你不希望任何使用图书馆的人欺骗你。

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

4 个答案:

答案 0 :(得分:2)

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

您可能会做出不同的事情来混淆机器人或自动脚本,但如果您试图阻止专门针对您网站的伪造,那么您将无能为力。

答案 1 :(得分:1)

说实话,除非你遵循这些非常简单的建议, ANY 尝试使这种防篡改失败将会失败:

  • 不做客户端的任何事情,这个问题家族是安全的同源,所以你想要做服务器端的一切,而不依赖于客户端上的任何东西;
  • 不信任您收到的输入,对其来源有疑问(例如,用户代理,Cookie,HTTP请求,ecc。都可以伪造成完全适合您的钥匙孔的钥匙);
  • 你真的不想检测鼠标点击,你想要的是区分人和机器,所以使用常见的技术解决这个问题;
  • 当前几乎无法解决机器的CAPTCHA或其他任务允许您区分真人和机器。

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

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

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

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

您所要做的就是去任何有广告的网站,看看他们做了什么:带有微型游戏的SWF插件,诱使您点击它。

顺便说一句:我不喜欢网页上的广告,所以也许你甚至没有实现那些东西......

答案 2 :(得分:0)

您可以检查是否在e.toString()的字符串表示中找到字符串'Mouse':

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

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

答案 3 :(得分: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