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

时间:2012-01-09 09:36:32

标签: php spam-prevention ddos

我正在考虑使用随机输入名称进行注册表单。它将以这种方式完成:

  1. 用户请求注册表单站点。
  2. 为输入字段创建随机名称并将其保存到用户的会话中。
  3. 渲染表单并将其显示给用户。
  4. 我只是想知道这种方法是否能给我任何东西。如果会话驱动程序是cookie - 它就是 使用第三方库以最佳方式加密和保护,我认为保存足够。如果用户不接受cookie,我可以拒绝注册 要删除cookie作为潜在的安全风险,我可以在数据库中存储会话。这似乎更安全,但也可能使服务器超载(?) 我的问题很简单。实现这样的功能有什么意义吗?

3 个答案:

答案 0 :(得分:6)

标准方法是隐藏文本字段。这是一个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。他们只是解析表单标记,他们看到一个看似需要填写的文本字段。因此,他们用一些随机数据填写了该字段。因为普通用户永远不会看到的表单字段已经填写,这意味着您可能正在处理机器人。

不要使用输入类型=隐藏,因为大多数垃圾邮件都足够聪明,可以注意到它们并忽略它们。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

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

一旦提交表单,只要您创建其对象,它就会使用适当的数据填充$_POST['fieldName']