【问题标题】:Blocking spam in a PHP site without bothering the user在不打扰用户的情况下阻止 PHP 站点中的垃圾邮件
【发布时间】:2010-11-16 03:12:47
【问题描述】:

我目前正在开发一个周末粗略开发的小型聊天/论坛网站,它有匿名条目(即:没有用户名或密码)。这看起来很容易让垃圾邮件发送者毁掉,但我不想用验证码或类似的反垃圾邮件输入来打扰用户。

是否有任何对用户不可见的替代方案?感谢您的帮助。

【问题讨论】:

    标签: php validation input captcha


    【解决方案1】:

    不是防弹解决方案,但您可以有一些隐藏的输入字段。如果这些不是空的,你就抓住了一个机器人。 机器人倾向于填写所有输入字段,而用户肯定会将他们看不到的字段留空。

    【讨论】:

    • 澄清一下,“隐藏”输入字段应该被 CSS(样式表,而不是内联样式)或更好的 javascript 隐藏(尽管只有当 javascript 已经是您网站的必要部分时)。执行input type=hidden 不会跟随任何机器人。
    • 仅供参考,这种技术称为蜜罐。
    • 我也不会愚弄机器人。您可以轻松地使用 JS 来检查字段是否隐藏(即使它被 CSS 隐藏)。此外,您假设所有字段都将由机器人填充,因此这并不能保护您免受机器人仅填充其中一些字段的影响。
    • @ReYell,当我第一次使用蜜罐时,我很惊讶它们的影响力。这似乎是一个太明显的技巧,但它的效果非常好。机器人往往注重数量而不是质量,因此任何需要它们处理时间来整理的技巧都是有帮助的。
    【解决方案2】:

    验证码的想法是人类很容易通过,但机器人等很难避免。如果您不想要这种解决方案,什么会阻止这些垃圾邮件机器人发布到您的网站?

    就像您希望自己的计算机安全但又不想使用防病毒软件和防火墙一样。

    我认为您可以为进入您网站的每个用户创建一个会话,并在他们第一次发布内容时向他们显示验证码(不需要登录,只需通过验证码)。如果他们通过它,只需在会话中存储他们是人类的标志。只要他们打开浏览器,他们就可以在您的网站上发布和回复他们想要的内容。机器人不太可能通过第一次测试。

    【讨论】:

      【解决方案3】:

      有两类反垃圾邮件保护。

      首先是让自动化机器人难以将数据偶然插入您的网站。隐藏表单域方法为此经常被提及,适用于低流量站点。为您的网站编写的垃圾邮件机器人可以轻易地击败这些保护措施。但是,如果您的目标太小,则不会发生这种情况。

      第二种是“烦人”的类型。这通常涉及验证码、注册或邮件确认。您可以使用一些方法来减少这种麻烦,但需要在机器人方面付出更多努力才能发布垃圾邮件。

      请注意,这两种方法通常都会阻碍残疾人和移动用户。

      【讨论】:

        【解决方案4】:

        这对我来说 100% 的时间都有效:

        <input type="text" style="display:none" name="email" value="do not fill this in it is for spam catching" />
        

        然后是服务器端(PHP):

        if($_POST['email'] != 'do not fill this in it is for spam catching') {
            // spam
        }
        

        如前所述,大多数机器人都会填写所有内容,尤其是名为“电子邮件”的输入。

        【讨论】:

        • 他们可能足够聪明,不会填充预填充的输入。在我看来,最好把它留空。
        • 非常好。它目前在我的网站上运行良好。如果(当)有一天机器人比这种方法更聪明,我当然会选择其他方法。我把它留在那里以便访问。
        【解决方案5】:

        关于垃圾邮件发送者,您应该了解的一件事是,他们总是追求唾手可得的果实。黑客也一样。我的意思是他们会选择影响最多用户的最容易命中的目标。这就是为什么 PHP 和 Windows 漏洞经常被利用的原因:它们影响到如此多的用户,如果你发现这样的弱点/利用你的目标“市场”是巨大的。

        这也是 Linux 和 Mac OS 相对不受病毒影响的一个重要原因,例如:目标市场比 Windows 小。现在我并没有将 Windows 的安全性和稳健性与 Mac/Linux 等同起来,但即使后两者的安全模型要好得多,但针对前者的攻击数量仍然与其缺陷不成比例。

        我这样说是因为避免此类问题的最佳方法之一是不使用流行的软件。例如 phpBB 就因为它非常流行而受到了很多攻击。

        因此,通过创建自己的聊天/论坛系统,您将处于劣势,因为您的系统没有流行的现场测试功能,但您也有优势,因为它不值得大多数垃圾邮件发送者使用是时候利用它了。所以你需要注意的是自动化系统会对你做什么。网站上的联系表格往往具有可识别的标记(如姓名、电子邮件和评论字段)。

        所以我会建议:

        • 忽略将表单发送给用户的 5-10 秒内的响应;
        • 使用蜜罐(CSS/JS 隐藏字段,如其他地方所述);
        • 在适用的情况下使用 Javascript 呈现、重新排序或显示表单;
        • 使用不可预测的表单字段名称;和
        • 通过 IP 限制不良响应。

        【讨论】:

        • 我认为蜜罐和定时器防御的结合将是一个好的开始。我将如何实现计时器?
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-08-01
        • 1970-01-01
        • 2013-12-17
        • 1970-01-01
        • 2013-12-31
        • 2018-06-21
        • 1970-01-01
        相关资源
        最近更新 更多