我应该为现有的网络联系表单实施某种垃圾邮件保护(验证码等)。但是,原始表单在我无法访问的虚拟服务器上使用 .cgi 文件,因此我无法使用此脚本。PHP 邮件功能已关闭。
我猜我需要自己的 cgi 文件,但我并不真正喜欢 perl 和 cgi :-)
也许你可以为我指出这个问题的某种解决方案。
我应该为现有的网络联系表单实施某种垃圾邮件保护(验证码等)。但是,原始表单在我无法访问的虚拟服务器上使用 .cgi 文件,因此我无法使用此脚本。PHP 邮件功能已关闭。
我猜我需要自己的 cgi 文件,但我并不真正喜欢 perl 和 cgi :-)
也许你可以为我指出这个问题的某种解决方案。
如果您认为您的所有用户都打开了 javascript,您可以制作某种歪斜的反机器人。
将表单设置action
为某些 404 页面,然后在 javascript 中将其更改回正确的action
页面。例子:
<form action="nowhere_ahaha" id="myform">
...
</form>
<script>
document.getElementById('myform').action = '/form_action.cgi';
</script>
所有这些都行得通,因为机器人通常不运行 js,但人类访问者会。
您可以添加否定验证码:
否定验证码与您的普通图像验证码具有完全相同的目的:防止机器人提交表单。图像(“正面”)验证码通过实施一个只有人类才能做到的步骤来做到这一点,但机器人不能:从图像中读取混乱的字符。但这很糟糕。它会产生可用性问题,会降低转化率,还会让很多人大吃一惊。为什么不反过来呢?负验证码创建了一个表单,其中包含只有机器人可以执行但人类不能执行的任务。这具有完全相同的效果,与正验证码相比,(传闻)假阳性识别率要低得多。所有这一切都不会让人类在提交表单时遇到任何额外的麻烦。这真的是双赢的。[来源]。
在您的情况下,您可能最好使用蜜罐:添加一个新字段:
<div style="position: absolute; left: -2000px;"><input type="text" name="surname" value="" /></div>
这假设您对接收姓氏不感兴趣。如果人们设法填写并提交此字段,他们很可能是机器人:普通浏览器不会显示该字段:普通用户不会看到它,因此不会填写它。
现在,在您的 CGI 脚本中,只需过滤“姓氏”;如果设置,停止处理并给出一个错误,或者就这样。
或者,如果这不可能,请尝试通过“其中记录没有设置姓氏”来过滤已发布表单的结果。比如说,如果您在 excel/CSV 中获得结果:只需使用 excel 过滤掉具有姓氏的项目。或者使用您的电子邮件过滤器将 surname: .... 具有值的任何邮件移动到特殊目录中。