4

我正在考虑在注册表单中使用随机输入名称。可以这样做:

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

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

4

3 回答 3

7

标准方法是有一个隐藏的文本字段。这是一个 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。他们只是解析表单标记,然后看到一个似乎需要填写的文本字段。所以他们用一些随机数据填写了这个字段。因为一个普通用户不应该看到的表单域已被填写,这意味着您可能正在与机器人打交道。

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

于 2012-01-09T10:18:26.673 回答
0

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

于 2012-04-11T05:51:24.287 回答
0

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

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

并且一旦提交表单,它就会$_POST['fieldName']在您创建其对象后立即填充适当的数据。

于 2015-04-26T01:44:34.293 回答