3

我一直在浏览有关该主题的所有建议帖子,但似乎找不到适合我或我完全理解的解决方案。

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

我最初的想法是禁用任何填写该字段的机器人的提交按钮。但是,由于该字段直接为空白,因此表单会加载提交按钮并且该点丢失了。

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

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

我不明白现在该怎么办:

jQuery.('#salesforce-crm-form .submit').click(function(){
     jQuery.ajax({
     // Get PHP function that determines whether the honeypot has been snatched.
     });
});

我正在为 action="" 使用外部 URL,所以我想也许只有当 PHP 返回干净的机器人时才能插入。

4

3 回答 3

2

你不能按照你想的顺序做事。

首先运行 PHP 以传递您的表单。

然后浏览器行动,向用户显示表单。他可能会输入数据并将其发回。

然后 PHP 再次打开,检查表单值。

您几乎拥有要检查蜜罐字段是否已填充的代码。您不应该尝试使用 AJAX,因为这种 PHP 检查只能在发送表单后进行。如果您检测到垃圾邮件,请不要执行表单的意图。

顺便说一句,机器人不按提交按钮。机器人基于解析表单发送请求,禁用所有 Javascript。

[编辑] 如果您的表单转到外部 URL,那么您将无法控制任何垃圾邮件检测。因为机器人不使用 Javascript,所以这个级别的任何东西都不会工作,但这就是你想要做的。

唯一可行的方法是不要将表单直接发送到外部 URL,而是发送到服务器上的 PHP 脚本,该脚本将检查垃圾邮件,然后将其发送到原始目的地。不知道这是否会搞砸其他任何事情,因为现在不是用户浏览器发送表单,而是您的服务器。如果在该端有任何检测和/或使用请求元数据,那么您就是在干扰这一点。

于 2012-10-03T10:32:48.070 回答
1

将默认值放入蜜罐输入中,并要求用户在发布前将其删除。禁用提交按钮也没有用处:) 机器人不能以这种方式工作,它们只会提交表单而不单击任何内容。

于 2012-10-03T10:31:17.873 回答
0

如果将输入框的类型改为隐藏,并给它一个ID,像这样

<input name="artificials" type="hidden" id="honeypot" value="">

那么用户将无法看到输入,但机器人会填写它。

然后在你的javascript中,使用jquery你可以检查一个像这样的值

var honeypot = $('#honeypot').val();
if(honeypot == '' || honeypot == null) {
   // Call ajax function
}

请注意,这尚未经过测试,只是一个示例。

于 2012-10-03T10:36:36.630 回答