【问题标题】:Protecting a web contact form from spam without PHP?在没有 PHP 的情况下保护 Web 联系表单免受垃圾邮件?
【发布时间】:2012-01-01 20:44:26
【问题描述】:

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

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

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

【问题讨论】:

    标签: php cgi captcha spam contact-form


    【解决方案1】:

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

    将表单 action 设置为某个 404 页面,并在 javascript 中将其更改回正确的 action 页面。示例:

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

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

    【讨论】:

    • 至少你可以告诉人类访问者,如果禁用 javascript,表单将无法工作。
    • @Saxoier,是的,但是 google bot 不会发送垃圾邮件。我的垃圾邮件机器人使用 rhino 运行 js :)
    • 这是一个简单的证据,证明“[...] bots do not run js [...]”是不正确的。
    【解决方案2】:

    您可以添加否定验证码:

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

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

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

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

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

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

    【讨论】:

    • 这是个好主意,将在我的网站上尝试一下。
    猜你喜欢
    • 2017-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-02
    • 2020-06-16
    • 1970-01-01
    相关资源
    最近更新 更多