在没有PHP的情况下保护web联系表单免受垃圾邮件的侵害


Protecting a web contact form from spam without PHP?

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

我猜我需要我自己的cgi文件,但我不是真的进入perl和cgi:-)

也许你能给我指出一个解决这个问题的方法。

您可以添加一个否定验证码:

一个消极的验证码与你的普通图像验证码的目的完全相同:防止机器人提交表单。图像("正面")验证码通过执行一个只有人类才能做到的步骤来做到这一点,但机器人不能:从图像中读取混乱的字符。但这很糟糕。它会产生可用性问题,影响转化率,并让许多人感到困惑。为什么不反过来做呢?负验证码创建了一个表单,其中的任务只有机器人才能执行,而人类无法执行。这具有完全相同的效果,(有趣的是)与阳性验证码相比,假阳性识别率要低得多。所有这些都不需要人们通过任何额外的麻烦来提交表单。这真的是双赢。[源].

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

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

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

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

或者,如果不可能,尝试通过"where record does not have姓氏集"过滤已发布表单的结果。例如,如果您以excel/CSV格式获得结果:只需使用excel过滤掉包含姓氏的项目。或者使用您的电子邮件过滤器移动姓氏:....的任何邮件

如果你假设你的所有用户都打开了javascript,你可以做一些歪斜的反bot。

设置表单action到一些404页面,并在javascript中改变它回到适当的action页面。例子:

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

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