我正在考虑使用随机输入名称进行注册表单。它将以这种方式完成:
我只是想知道这种方法是否能给我任何东西。如果会话驱动程序是cookie - 它就是 使用第三方库以最佳方式加密和保护,我认为保存足够。如果用户不接受cookie,我可以拒绝注册 要删除cookie作为潜在的安全风险,我可以在数据库中存储会话。这似乎更安全,但也可能使服务器超载(?) 我的问题很简单。实现这样的功能有什么意义吗?
答案 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,这非常有效。好的例子是Botscout和Spambusted。我试过了两个,他们减少了我的垃圾邮件发送者机器人注册。
答案 2 :(得分:0)
有点晚了,但是我创建了一个类文件,它可以完全满足你的需要,你可以找到它here。 您只需要通过函数示例传递表单的名称。
<input type="text" name="<?php echo $obj->DynamicName("fieldName")?>"/>
一旦提交表单,只要您创建其对象,它就会使用适当的数据填充$_POST['fieldName']
。