【问题标题】:Preventing mass form submits by $_SESSION防止通过 $_SESSION 提交大量表单
【发布时间】:2011-04-29 17:32:10
【问题描述】:

如果我被一个用 C# 创建的 .NET 程序轰炸了——因为用户在我的表单上大量提交 $_POST 字段而被轰炸...这就是我的联系表单。

我不确定 $_POST 的质量究竟是如何出现在 .NET 程序中的,或者它甚至可能是一个 c++ 程序,我不知道。但是我有一个想法来解决这个问题。

我的第一个想法需要$_SESSION 但是...用户创建的那些$_POST 轰炸程序会处理/接受$_SESSION 吗?我真的不想知道,但也许对 C# 中的 WebClient 类有经验的人会知道它是否处理了$_SESSION'S 或用户正在使用的任何东西。我正在考虑使用$_SESSION['submitted'] = $count;$count++; 的另一部分

if($_SESSION['submitted'] > 5) {
    //display captcha or block from site
} else {
    $count++;
}

如果用户的程序没有处理 $_SESSION 是否有可能我可以禁用他们的网站?所以他们不能攻击我的联系表?

【问题讨论】:

    标签: php mysql session


    【解决方案1】:

    绕过会话锁定对于恶意用户来说是微不足道的。只需在每次 POST 后删除会话 cookie,他们就会获得一个全新的干净会话,并重置限制。

    阻止此类用户的唯一安全方法是开始限制他们的 IP 地址。将其限制为每分钟一定数量的连接尝试,他们将无法提交超过每分钟的请求数。现在,如果他们可以在主机之间跳转,那么您将遇到更大的问题,并且可能应该考虑将您的表单移动到其他地方,这样他们得到的只是 404(直到他们注意到它被移动了)。

    不利的一面是,如果他们使用通用代理或像 AOL 这样代理一切的东西,你也会阻止其他合法用户。

    【讨论】:

    • 同意这一点,我们可以补充一点,您可以检查网络上所有可用的营销用户跟踪代码 sn-ps,以获得用户检测方面的好主意。以panopticlick.eff.org 为例,查看他们收集的所有数据并考虑唯一的访问者哈希。
    • 如何限制 IP 地址? ATM 我的新方法是将他们的 IP 和 PHP 时间插入 mysql 数据库,每 12 小时运行一次 cron 作业,删除超过 12 小时的 IP。如果数据库中有 5 个相同的 IP,它将阻止它们与我联系。
    • 这仍然会让他们用请求锤击您的服务器。最好的地方是防火墙,所以请求甚至不会到达 Apache。如果您使用的是 linux,forum.openwrt.org/viewtopic.php?pid=34494 中详述的 iptables 命令(修改为适用于端口 80 而不是端口 22)将完美运行。我使用与此非常相似的东西来阻止我家用机器上的 SSH 扫描。
    【解决方案2】:

    您可以设置一些安全屏障,例如登录表单或其他形式的身份验证(例如浏览器检查等)

    除此之外,我唯一能想到的就是阻止传入的 IP,这可能又不是一个好主意

    【讨论】:

      【解决方案3】:

      如果我错了,有人可以纠正我,但是 SESSION 存储一个带有会话 id(很长的哈希字符串)的 cookie(或其他方式),SESSION 变量存储在服务器上。因此,即使他们处理了 SESSION,他们也无法控制服务器存储的 SESSION 变量。

      如果我是你,我会将 CAPTCHA 设置为始终开启...

      【讨论】:

        【解决方案4】:

        仅仅实施验证码怎么样?

        【讨论】:

          猜你喜欢
          • 2014-11-15
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-10-02
          • 2021-01-30
          • 2017-01-23
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多