使用随机名称字段进行输入以对抗垃圾邮件机器人


Using random name fields for input to fight spambots

我正在考虑为注册表使用随机输入名称

  1. 用户请求注册表单站点
  2. 为输入字段创建随机名称,并将其保存到用户的会话中
  3. 渲染表单并将其显示给用户

我只是想知道这种方法是否能给我带来什么。如果会话驱动程序是cookie使用第三方库以尽可能好的方式进行加密和保护,我认为这是保存足够的。如果用户不添加cookie,我可以拒绝注册
为了将cookie作为潜在的安全风险删除,我可以将会话存储在数据库中。这看起来更安全,但也可能使服务器过载(?)
我的问题很简单。实现这样的功能有意义吗?

标准方法是有一个隐藏的文本字段。这是一个type=text的字段,但应用了CSS规则,因此它是不可见的。

标记:

<input type="text" name="put_some_innocuous_name_here" class="some_innocuous_css_class_name_here" value="" />

CSS:

input.some_innocuous_css_class_name_here {
    display: none;
}

PHP:

if ((isset ($_POST ['put_some_innocuous_name_here']))
&& ($_POST ['put_some_innocuous_name_here'] != ''))
{
    throw new Exception ('Suspected bot!');
}

它的工作方式很简单。普通用户永远不会看到您的隐藏文本字段,因为CSS规则会将其隐藏。因此,真正的用户永远不会填写它。

然而,大多数垃圾邮件机器人并不知道CSS。他们只需解析表单标记,就会看到一个似乎需要填写的文本字段。所以他们用一些随机数据填充字段。因为已经填写了一个普通用户永远看不到的表单字段,这意味着你可能正在处理一个机器人

不要为此使用inputtype=hidden,因为大多数垃圾邮件机器人都足够聪明,可以注意到它们并忽略它们。

有点晚了,但我已经创建了一个类文件,它完全可以满足您的需要。您可以在这里找到它。您只需要通过一个函数示例传递表单的名称。

<input type="text" name="<?php echo $obj->DynamicName("fieldName")?>"/>

一旦表单提交,它将在创建其对象时立即用适当的数据填充CCD_ 1。

尝试根据已知的垃圾邮件发送者列表检查IP,这非常有效。很好的例子是Botscout和Spambrusted。我两者都试过了,他们减少了我的垃圾邮件发送者机器人注册。