【问题标题】:Is there a way to differentiate between a JavaScript click and a real user click有没有办法区分 JavaScript 点击和真实用户点击
【发布时间】:2024-01-23 13:32:01
【问题描述】:

我有一个绑定到锚链接的 JavaScript 点击事件,该链接通过 Ajax 在点击时提交用户数据。这个链接实际上并没有去任何地方,它只是一个 Ajax 帖子。

问题是用户可以编写脚本来快速提交垃圾邮件。有没有办法禁止 JavaScript 触发点击事件。

我可以对其进行洪水控制,但我不能在不破坏聊天室功能的情况下使用过于恶劣的控制。

【问题讨论】:

  • 并非所有浏览器都允许模拟点击(jQuery 在其自己的模型中伪造它)。此外,假设“点击”是鼠标按钮操作的结果,其他事件信息(例如鼠标位置)可能与预期不一致。
  • @pst 很好的建议,谢谢。你能告诉我如何检查 jquery 的假触发器吗?

标签: javascript dom event-handling dom-events spam-prevention


【解决方案1】:

问题是用户可以写 快速提交垃圾邮件的脚本

AFAIK 您将无法区分 javascript 点击和用户点击。

最好的办法是验证提交的数据。

【讨论】:

    【解决方案2】:

    如果您真的想进行一些验证以停止自动提交,您可以添加所有网站都会执行的图像检查。

    用户必须输入他看到的图像才能继续,我不知道该图像的技术名称。

    它可以停止用户自动化作业

    【讨论】:

    • 这种支持的技术名称是验证码。
    • @lalit 非常感谢,今天又从 SO 学到了一件新东西
    【解决方案3】:

    如果您的目的是防止用户做有害的事情,那么在客户端进行检查是一个非常糟糕的主意。总有办法绕过它。唯一可靠的方法是检查服务器。

    您可以简单地为每个用户设置两个变量:垃圾邮件分数和上一篇帖子的时间戳。每当用户发布一条新消息时,计算自他上一条消息以来已经过去了多少时间,并每秒降低一点分数,但每发送一条消息就增加一个固定值。一旦达到阈值,就拒绝新消息,直到它再次减少。

    【讨论】:

    • 对,听起来是一个相当不错的实现。然而,脚本仍然可以遵守垃圾邮件阈值,但仍然是滥用:s
    【解决方案4】:

    您可以检查 event.which 属性,它应该包含一个键(对于鼠标,通常是 1、2 或 3)代码,用于按下的键。如果该属性不存在,那么它很可能是 JavaScript 单击事件,而不是用户鼠标单击。

    if (event.which != null) {
        // likely was user click
    }
    

    【讨论】:

    • 这对我有用。虽然我同意这不是避免垃圾邮件的解决方案,但解决方案必须是服务器端的。
    最近更新 更多