我需要为现有的网页联系表单实现一种防止垃圾邮件的保护(验证码等)。然而,原始表单使用了一个我无法访问的虚拟服务器上的 .cgi 文件,因此我无法使用这个脚本。PHP邮件函数已关闭。
我猜我需要自己的cgi文件,但我不太懂perl和cgi :-)
也许你可以指引我解决这个问题的办法。
我猜我需要自己的cgi文件,但我不太懂perl和cgi :-)
也许你可以指引我解决这个问题的办法。
如果您假设所有用户都已启用JavaScript,则可以创建某种倾斜的反机器人功能。
将表单的action
设置为某个404页面,在JavaScript中将其更改回正确的action
页面。示例:
<form action="nowhere_ahaha" id="myform">
...
</form>
<script>
document.getElementById('myform').action = '/form_action.cgi';
</script>
负面验证码的目的与普通图像验证码相同: 防止机器人提交表单。 图像(“正面”)验证码通过实现只有人类才能完成的步骤来实现这一点,但机器人无法完成: 从图像中阅读混乱的字符。 但这是不好的。 它会产生可用性问题,降低转化率,并使许多人感到困惑。 为什么不反其道而行之呢? 负面验证码创建了一个只有机器人可以执行而人类无法执行任务的表单。 这具有完全相同的效果,并且(据说)与正面验证码相比,误报率要低得多。 所有这些都不会使人类在提交表单时额外麻烦。 这真的是双赢。 [来源]。
在您的情况下,您最好使用蜜罐:添加一个新字段:
<div style="position: absolute; left: -2000px;"><input type="text" name="surname" value="" /></div>
假设您不想收到姓氏信息。如果人们设法填写并提交此字段,则很可能是机器人:正常浏览器不会显示该字段:普通用户将看不到它,因此不会填写。
现在,在您的CGI脚本中,只需过滤“surname”即可;如果设置了,请停止处理并提供错误,或者就这样离开它。
或者,如果不可能,请尝试通过“没有设置姓氏的记录”来过滤已发布表单的结果。例如,如果您在excel / CSV中获取结果:只需使用excel来过滤掉具有姓氏的项目。或使用您的电子邮件过滤器将任何具有姓氏值的邮件移动到特殊目录中。