这是抓住机器人的好方法吗?

时间:2010-01-19 16:56:20

标签: php

这种方法是否足够?

<?php

// User pressed "Register"
if (!empty($_POST['name']) && $_POST['email']) {


    if (!empty($_POST['antispam'])) 
        exit("bye");

    }

?>

<form>

<input type="hidden" name="antispam" value="" />

Accname: <input type="text" name="name" value="" />
Email: <input type="text" name="email" value="" />

......

</form>

4 个答案:

答案 0 :(得分:4)

在所有基本意义上的想法,当然。我推荐的简单实现只是你试图阻止的大多数垃圾邮件扫描程序都会查找标题为“用户名”,“名称”,“用户”等的字段。

因此,不是将蜜罐命名为“反垃圾邮件”,我会将其命名为“用户名”或与您现有表格不冲突的类似内容。

答案 1 :(得分:2)

可能是用于触发垃圾邮件机器人的表单字段的最佳名称是url

机器人解析html的type=text属性或textarea标记a并忽略所有其他属性的机会非常合理。

使用一些额外的代码行可以提高捕获spambot的几率:

<强> styles.css的

#commentUrl {
    display: none;
}

<强>的script.js

function setFlag() {
    document.getElementById('commentUrl').value = 'Javascript check ok';
}

<强> form.html

<form onsubmit="setFlag();" method="post" action="comment.php">
    <label for="commentName">Accname:</label>
      <input type="text" id="commentName" name="comment_name" value="" />

    <label for="commentEmail">Email:</label>
      <input type="text" id="commentEmail" name="comment_email" value="" />

    <label for="commentUrl">Url:</label>
      <input type="text" id="commentUrl" name="comment_url" value="http://" />
</form>

<强> comment.php

<?php

   if ($_POST['comment_url'] <> 'Javascript check ok' && $_POST['comment_url'] <> 'http://') {
       // Let's increase their server load.
       header('Location: http://' . $_SERVER['REMOTE_ADDR'] . '/', 307); 
   }
?>

因为您使用了三种不同的语言,所以您可以大大提高抓住垃圾邮件发送者的几率 例如,您可以通过动态地将<link rel="stylesheet"动态附加到DOM来改进javascript。

答案 2 :(得分:1)

我不建议隐藏输入类型或让其中包含“垃圾邮件”。最好的方法是给它一个中性名称(可能是“消息”)并通过css将其隐藏在页面中。另外,我会通过添加一个时间戳字段来测量填写表单所需的时间(因为机器人会非常快或非常慢)(并再次给它一个中性名称并对其进行编码)。

答案 3 :(得分:1)

我不会使用隐藏字段,因为机器人可能只查找type="text"的元素。命名应该是常见的,但你没有用的东西,例如:

  • 姓名
  • 名字
  • 电子邮件
  • 用户名
  • 密码
  • 生物
  • 描述

您应该从

更改输入
<input type="hidden" name="antispam" value="" />

更多的内容

<input type="text" name="username" value="" style="display:none; height: 0; width: 0; border: none; background: transparent; margin: 0; padding: 0;" />