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

在没有PHP的情况下保护web联系人表单免受垃圾邮件?,php,cgi,captcha,spam,contact-form,Php,Cgi,Captcha,Spam,Contact Form,我应该对现有的web联系人表单实施某种垃圾邮件保护(验证码等)。但是,原始表单在虚拟服务器上使用了一个我无法访问的.cgi文件,因此我无法使用此脚本。 PHP邮件功能已关闭 我想我需要自己的cgi文件,但我对perl和cgi不太感兴趣:-) 也许你可以给我指出一些解决这个问题的方法。如果你假设你的所有用户都打开了javascript,你可以做一些歪斜的反机器人 将表单action设置为404页,并在javascript中将其更改回正确的action页。例如: <form action="n

我应该对现有的web联系人表单实施某种垃圾邮件保护(验证码等)。但是,原始表单在虚拟服务器上使用了一个我无法访问的.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>

...
document.getElementById('myform').action='/form_action.cgi';

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

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

负面验证码与普通图像验证码的作用完全相同:防止机器人提交表单。图像(“正”)验证码通过实现一个只有人类才能做到的步骤来实现这一点,但机器人无法做到:从图像中读取混乱的字符。但这很糟糕。它造成了可用性问题,影响了转化率,也把很多人搞糊涂了。为什么不反过来做呢?负面验证码创建一个表单,该表单具有只有机器人才能执行的任务,但人类无法执行。这具有完全相同的效果,与阳性验证码相比,假阳性识别率要低得多。所有这些都不会让人类为了提交表单而经历任何额外的麻烦。这真是双赢

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

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

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

现在,在CGI脚本中,只需过滤“姓氏”;如果设置了,停止处理并给出一个错误,或者干脆不处理


或者,如果不可能,请尝试通过“where record not have name set”过滤已发布表单的结果。比方说,如果您在excel/CSV中获得结果:只需使用excel筛选出具有姓氏的项目。或者使用您的电子邮件过滤器来移动任何姓氏:。。。。有一个值,放入一个特殊目录。

至少你可以告诉人类访问者,如果禁用javascript,表单将无法工作。@Saxoier,是的,但google bot不会发送垃圾邮件。我的垃圾邮件机器人使用rhino运行js:)这是一个简单的证据,证明“[…]机器人不运行js[…]”是不正确的。这是一个好主意,我将在我的网站上尝试。