【问题标题】:When is a bot protection necessary in UI interactions?UI 交互中何时需要机器人保护?
【发布时间】:2013-12-14 21:53:28
【问题描述】:

这个问题很宽泛,但我会根据我的用例缩小范围。

我不在我的网站中使用表单,只是对 php 服务的 ajax 调用。基本上,我使用带有关联“点击”事件的程式化跨度,这些跨度继续执行 ajax 请求,将所有内容发布到服务器。

  • 没有<form> 元素,
  • 没有<input type="submit"> 元素。
  • 如果 javascript 被禁用,那么...没有任何效果(无论它是否是一件好事不是本文的目的)

但我仍然想确保没有 smart$ss 机器人使用我的“表单”生成垃圾。

所以我的问题是:在这种情况下我需要验证码或类似的机器人保护吗?


根据给定的答案,这是我选择实施的解决方案:

html:

<form id="honeypotform" action="http://whatever.com">
    <input type="text" id="formbody">
    <input type="submit" id="submitbtn" value="Submit">
</form>

css:

#honeypotform { display: none; }

真实提交链接:

<span onclick="do();">Submit</span>

链接动作:

function do() {

    if (formbody.value != "") return true; 
    /* ... */
}

几天后我会跟进这篇文章,对我的结果提供反馈。

【问题讨论】:

标签: javascript forms captcha bots protection


【解决方案1】:

Bot 究竟做了什么:它们实际上检测表单中的所有输入元素并运行一个脚本,用一些有效文本填充输入,从而用虚假垃圾条目填充数据库。

如何解决这个问题:它非常简单,每个表单验证都必须遵循这个模式。 您始终可以在表单中放置一个隐藏的输入字段并为其分配一个空值。

当您在服务器端验证时,请确保您将此条目设为空。如果它是 EMPTY 继续您的插入查询,否则将其视为 BOT 攻击这是在填满垃圾条目。

有趣的阅读:When the bots attack!

在不使用提交按钮的情况下将输入包含在表单标签中是一个不错的主意。(我推荐这个)

以防万一您考虑禁用 javascript,您的 ajax 将无法工作。

对于偏执的开发人员来说,将服务器端验证作为 PLAN B 总是一个好主意。质量工作!!!

一个例子:你给的东西仍然是脆弱的。

<form>
<input type="text" id="name">
<input type="text" id="contact_no">
<input type="text" id="password">
<input type="hidden" id="email">//just seduce the BOT(considering that the bot reads the id or any other attribute to fill up values.Make sure on the server side $("#email").val is always zero..be it on client or server)
<input type="text" id="original_mle">//store this in db after server side validation
</form>

@AndreasBjørn:是的..这是一个漏洞..如果有专门为我的表单设计的提供恶意数据条目的机器人,我恐怕会失败。CAPTCHA 似乎是这种情况下唯一的解决方案。

【讨论】:

  • 当您说hidden 时,我知道它必须是 CSS 隐藏的(根据您在 cmets 中留下的链接)。我一定会实现这个想法。我想知道我是否真的必须这样做?机器人真的会点击我的 javascript 链接吗?
  • 图像验证码的好老方法,然后有一个简单的数学运算......虽然不是完全证明......
  • 我认为它不会起作用,因为某些机器人仅根据先前已知的提交伪造POST 信息。在某些情况下,机器人甚至不需要创建GET
  • 如果一个机器人是专门为滥用你的表单而设计的,那么你可以确定这一切都行不通。然后验证码实施或更好的策略是必要的。但是,如果您没有被机器人“瞄准”,那么除了使用@Onaseriousnote 提到的方法之外,做更多的事情就没有什么意义了。
  • 当您说计划 B 是服务器端验证时,假设我的表单只是几个字段,然后在我的服务器上生成一个报价文件。除了检查长度和类似的东西,我还能做什么?当需要确保表单输入的功能有效性时,情况会变得非常严峻
猜你喜欢
  • 2020-08-20
  • 2013-09-20
  • 2017-01-28
  • 2022-01-23
  • 2012-05-25
  • 2012-03-19
  • 2018-09-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多