4

我应该为现有的网络联系表单实施某种垃圾邮件保护(验证码等)。但是,原始表单在我无法访问的虚拟服务器上使用 .cgi 文件,因此我无法使用此脚本。PHP 邮件功能已关闭

我猜我需要自己的 cgi 文件,但我并不真正喜欢 perl 和 cgi :-)

也许你可以为我指出这个问题的某种解决方案。

4

2 回答 2

4

如果您认为您的所有用户都打开了 javascript,您可以制作某种歪斜的反机器人。

将表单设置action为某些 404 页面,然后在 javascript 中将其更改回正确的action页面。例子:

<form action="nowhere_ahaha" id="myform">
   ...
</form>
<script>
document.getElementById('myform').action = '/form_action.cgi';
</script>

所有这些都行得通,因为机器人通常不运行 js,但人类访问者会。

于 2011-11-19T10:31:44.453 回答
4

您可以添加否定验证码:

否定验证码与您的普通图像验证码具有完全相同的目的:防止机器人提交表单。图像(“正面”)验证码通过实施一个只有人类才能做到的步骤来做到这一点,但机器人不能:从图像中读取混乱的字符。但这很糟糕。它会产生可用性问题,会降低转化率,还会让很多人大吃一惊。为什么不反过来呢?负验证码创建了一个表单,其中包含只有机器人可以执行但人类不能执行的任务。这具有完全相同的效果,与正验证码相比,(传闻)假阳性识别率要低得多。所有这一切都不会让人类在提交表单时遇到任何额外的麻烦。这真的是双赢的。[来源]

在您的情况下,您可能最好使用蜜罐:添加一个新字段:

<div style="position: absolute; left: -2000px;"><input type="text" name="surname"  value="" /></div>

这假设您对接收姓氏不感兴趣。如果人们设法填写并提交此字段,他们很可能是机器人:普通浏览器不会显示该字段:普通用户不会看到它,因此不会填写它。

现在,在您的 CGI 脚本中,只需过滤“姓氏”;如果设置,停止处理并给出一个错误,或者就这样。

或者,如果这不可能,请尝试通过“其中记录没有设置姓氏”来过滤已发布表单的结果。比如说,如果您在 excel/CSV 中获得结果:只需使用 excel 过滤掉具有姓氏的项目。或者使用您的电子邮件过滤器将 surname: .... 具有值的任何邮件移动到特殊目录中。

于 2011-11-19T10:40:18.553 回答