javascript 在UI交互中什么时候需要机器人保护?

ffscu2ro  于 2023-04-28  发布在  Java
关注(0)|答案(1)|浏览(91)

这个问题相当广泛,但我会用我的用例来缩小它。
我在我的网站中不使用表单,只 AJAX 调用php服务。基本上,我使用带有“点击”事件的风格化的span,它会继续进行 AJAX 请求,将所有内容发布到服务器。

  • <form>元素,
  • <input type="submit">元素。
  • 如果JavaScript被禁用,那么。..什么都不起作用(不管是不是好事都不是这篇文章的目的)

但我仍然想确保没有智能$ss机器人生成垃圾与我的“形式”。
所以我的问题是在这种情况下,我需要验证码或类似的机器人保护吗?
下面是我选择实现的解决方案,根据给定的答案:
联系我们

<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; 
    /* ... */
}

我会在几天后跟进这篇文章给予我的结果。

bxfogqkk

bxfogqkk1#

Bot具体做什么:它们实际上检测表单中的所有输入元素,并运行一个脚本,用一些有效的文本填充输入,从而用虚假的垃圾条目填充数据库。
如何解决这个问题:它非常简单,每个表单验证都必须遵循这个模式。您总是可以在表单中放置一个隐藏的输入字段,并为其分配一个空值。

当您在服务器端进行验证时,只需确保此条目为空即可。如果它是继续你的 * 插入查询 * 否则认为它是一个BOT攻击这填补了垃圾条目。
有趣的阅读:When the bots attack!
将输入包含在表单标签中而不使用提交按钮也不是一个坏主意。(我推荐这个)
以防万一,如果你考虑禁用javascript,你 AJAX 将无法工作。

  • 对于偏执的开发人员来说,将服务器端验证作为计划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似乎是唯一的解决方案。

相关问题