这个问题相当广泛,但我会用我的用例来缩小它。
我在我的网站中不使用表单,只 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;
/* ... */
}
我会在几天后跟进这篇文章给予我的结果。
1条答案
按热度按时间bxfogqkk1#
Bot具体做什么:它们实际上检测表单中的所有输入元素,并运行一个脚本,用一些有效的文本填充输入,从而用虚假的垃圾条目填充数据库。
如何解决这个问题:它非常简单,每个表单验证都必须遵循这个模式。您总是可以在表单中放置一个隐藏的输入字段,并为其分配一个空值。
当您在服务器端进行验证时,只需确保此条目为空即可。如果它是空继续你的 * 插入查询 * 否则认为它是一个BOT攻击这填补了垃圾条目。
有趣的阅读:When the bots attack!
将输入包含在表单标签中而不使用提交按钮也不是一个坏主意。(我推荐这个)
以防万一,如果你考虑禁用javascript,你 AJAX 将无法工作。
一个例子:你所给予的仍然是脆弱的。
@AndreasBjørn:是的。这是一个漏洞。。我担心如果有一个专门为我的表格设计的机器人提供恶意数据条目,我会失败。在这种情况下,CAPTCHA似乎是唯一的解决方案。