使用PHP和AJAX进行简单的蜜罐表单检查

使用PHP和AJAX进行简单的蜜罐表单检查,php,ajax,forms,bots,Php,Ajax,Forms,Bots,我已经浏览了所有关于这个主题的建议帖子,但似乎找不到一个对我有效或我完全理解的解决方案 我只是想做一个简单的蜜罐,检查一个隐藏的字段是否由机器人填充,如果是的话,会破坏表单。我的问题似乎是在使用AJAX查看PHP值是否被清除时。希望这是有意义的,因为我不太精通编码语言 我最初的想法是对任何填写该字段的机器人禁用提交按钮。但是,由于该字段是空白的,表单将加载submit按钮,该点将丢失 这是检查机器人程序表单的一部分: <!-- THE HONEYPOT --> <li id="

我已经浏览了所有关于这个主题的建议帖子,但似乎找不到一个对我有效或我完全理解的解决方案

我只是想做一个简单的蜜罐,检查一个隐藏的字段是否由机器人填充,如果是的话,会破坏表单。我的问题似乎是在使用AJAX查看PHP值是否被清除时。希望这是有意义的,因为我不太精通编码语言

我最初的想法是对任何填写该字段的机器人禁用提交按钮。但是,由于该字段是空白的,表单将加载submit按钮,该点将丢失

这是检查机器人程序表单的一部分:

<!-- 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
}