使用PHP和AJAX进行简单的蜜罐表单检查
我已经浏览了所有关于这个主题的建议帖子,但似乎找不到一个对我有效或我完全理解的解决方案 我只是想做一个简单的蜜罐,检查一个隐藏的字段是否由机器人填充,如果是的话,会破坏表单。我的问题似乎是在使用AJAX查看PHP值是否被清除时。希望这是有意义的,因为我不太精通编码语言 我最初的想法是对任何填写该字段的机器人禁用提交按钮。但是,由于该字段是空白的,表单将加载submit按钮,该点将丢失 这是检查机器人程序表单的一部分:使用PHP和AJAX进行简单的蜜罐表单检查,php,ajax,forms,bots,Php,Ajax,Forms,Bots,我已经浏览了所有关于这个主题的建议帖子,但似乎找不到一个对我有效或我完全理解的解决方案 我只是想做一个简单的蜜罐,检查一个隐藏的字段是否由机器人填充,如果是的话,会破坏表单。我的问题似乎是在使用AJAX查看PHP值是否被清除时。希望这是有意义的,因为我不太精通编码语言 我最初的想法是对任何填写该字段的机器人禁用提交按钮。但是,由于该字段是空白的,表单将加载submit按钮,该点将丢失 这是检查机器人程序表单的一部分: <!-- THE HONEYPOT --> <li id="
<!-- THE HONEYPOT -->
<li id="artificial-detect">
<label for="artificials">If you see this, leave this form
field blank and invest in CSS support.</label>
<input name="artificials" type="text" value="">
</li>
<!-- /HONEYPOT -->
<?php
$spam = $_POST['artificials']; // This is our Honeypot field
if($spam) { // If the Honeypot field has been filled in
die("No spamming allowed bitch!");
} else { ?>
<li class="last">
<input class="submit" type="submit" name="submit">
</li>
<?php } ?>
我正在为action=”“使用一个外部URL,所以我想可能只有当PHP返回干净的机器人时才能插入该URL。将默认值放入蜜罐输入,并要求用户在发布之前删除它。此外,禁用提交按钮也没有用:)机器人不会以这种方式工作,它们只需提交表单而不单击任何内容。您无法按您认为的顺序执行操作 首先运行PHP来交付表单 然后浏览器开始工作,向用户显示表单。他可能会输入数据并将其发回 然后PHP再次打开,检查表单值 您几乎拥有了要检查蜜罐字段是否已填充的代码。您不应该尝试使用AJAX,因为此PHP检查只能在发送表单后进行。如果检测到垃圾邮件,请不要执行表单的预期操作 顺便说一句,机器人不会按提交按钮。机器人基于解析表单发送请求,禁用所有Javascript [编辑] 如果表单转到外部URL,则无法控制任何垃圾邮件检测。因为机器人不使用Javascript,这个级别上的任何东西都不会工作,但这正是您要做的
唯一有效的方法是不直接将表单发送到外部URL,而是发送到服务器上的PHP脚本,该脚本将检查垃圾邮件,然后将其发送到原始目的地。不知道这是否会搞乱其他事情,因为现在发送表单的不是用户浏览器,而是服务器。如果在该端检测和/或使用了请求元数据,那么您就是在干扰这一点。如果您将输入框的类型更改为隐藏,并给它一个ID,如下所示
然后,用户将无法看到输入,但机器人将填写它
然后在javascript中,使用jquery可以检查如下值
var honeypot = $('#honeypot').val();
if(honeypot == '' || honeypot == null) {
// Call ajax function
}
注意,这还没有经过测试,只是一个例子
var honeypot = $('#honeypot').val();
if(honeypot == '' || honeypot == null) {
// Call ajax function
}