【问题标题】:How to stop spammers entering http into a form to database如何阻止垃圾邮件发送者将 http 输入到数据库的表单中
【发布时间】:2010-03-18 13:16:56
【问题描述】:

我有一个将信息发送到数据库表的表单。我用 Javascript 对其进行了检查,但是当 Javascript 关闭时,阻止垃圾邮件发送者使用 PHP 将 http 等输入数据库的最佳方法是什么?

【问题讨论】:

    标签: php spam-prevention


    【解决方案1】:

    您可以在表单上实施验证码:

    http://en.wikipedia.org/wiki/CAPTCHA

    编辑:当然也要像往常一样在服务器端验证表单数据并检查 html 标签等,但 CAPTCHA 应该有助于防止自动垃圾邮件攻击。

    【讨论】:

    • Captcha 针对简单机器人的工作,但如果有人真的愿意,它们可以被克服。最近发现,一个出售音乐会门票的热门网站在几秒钟内就卖光了,因为尽管每次购买都需要验证码,但一堆机器人正在抢购转售市场的所有最佳座位。
    • 那是个坏消息。是否有任何简单的 php 代码可以添加以阻止这种情况?
    • 一切都可以以一种或另一种方式“伪造”。但是没有简单的方法可以避免这种情况。您应该只应用足以应对危险的安全措施。在大多数情况下,好的验证码就足够了(以及服务器验证)。
    • @tloach:那么它要么实施不善,要么使用了已知被黑客入侵的(过时的)第 3 方验证码 API。
    • @BalusC 不,但这是一个庞大而复杂的攻击wired.com/threatlevel/tag/ticket-master
    【解决方案2】:

    永远不要相信客户。始终验证服务器端的所有数据。用于表单验证的 JavaScript 可能只是一个附加功能。您可以从基本的 PHP 函数开始检查内容是否包含您不喜欢的某些字符串,例如。 “http://”。

    if (strpos('http://', $_POST['message']) !== false) { /* 拒绝 */ }

    【讨论】:

      【解决方案3】:

      您可以使用CSRF protection 来防止垃圾邮件发送者,我发现它非常有效。

      What it ishow it works

      另一种偷偷摸摸的方法是包含一个“蜜罐”字段 - 一个永远不应该与内容一起提交的隐藏字段。如果已填满,您就知道它是垃圾邮件。这些方法都不需要烦人的验证码。

      【讨论】:

      • 其实验证码是一种CSRF保护。
      • CSRF 被用于各种不好的东西,但是,垃圾邮件表单通常不是其中之一。 CSRF 是关于使用他人的许可/授权来执行未经授权的操作。
      • @Jacco 你是对的,但是如果你简单地看它,它的目的是防止未经授权的提交 - 在这种情况下,这就是机器人(除了更聪明的机器人!)
      【解决方案4】:

      有两件事需要考虑哪些应该并行实施(也许还有更多)。

      1. 验证码(如前所述)
      2. 在服务器端验证您的数据!你写你是通过javascript来做到这一点的。这很好,但同样的验证过程应该用 PHP 编写。

      好吧,对于 CAPTCHA,无论如何您都必须在服务器端进行验证。但即使你决定不实施验证码,你也应该在服务器端进行数据验证。

      【讨论】:

        【解决方案5】:

        我建议在插入之前使用htmlentities() 函数。

        显然您的插入也应该使用parametrized queries 来与数据库交互。验证码当然是一种选择,但它更多地用于限制某人可以发布的频率,而不是限制他们可以发布的内容。使用 hmtl 转义(同样是 htmlentities() 函数)来防止用户输入您不想要的内容。

        【讨论】:

          猜你喜欢
          • 2013-03-08
          • 2016-06-09
          • 1970-01-01
          • 2012-09-11
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多