【问题标题】:prevent $_POST bombing防止 $_POST 轰炸
【发布时间】:2023-03-29 17:51:02
【问题描述】:

我有一个发送到我的电子邮件的联系表格,我最近受到某种垃圾邮件攻击的攻击......我一夜之间收到了来自同一个 IP 地址的大约 76k 封电子邮件。这让我真的很生气。我能做些什么来解决这个问题?我知道我可以实现验证码,但我不希望这样。 :\

我还能做些什么来防止多个表单提交?

【问题讨论】:

  • 您可以使用$_SESSION 保存上次提交联系表单的时间以及此会话期间的提交次数。当计数大于 3 且上次时间小于 5 分钟前,发布警告并更新上次以防止垃圾邮件。
  • @Khez 仅在客户端处理 cookie 时才有效。如果没有,那么将为每个请求创建一个新会话。我认为这不是垃圾邮件发送者的证明。
  • @James 是的,这就是为什么我只发表评论而不回答的原因。只是想把他推向正确的方向。
  • 要了解有关如何避免垃圾邮件的更多信息,请考虑在 webmasters.stackexchange.com 上浏览问题 - 那里有很多关于该主题的信息!

标签: php mysql


【解决方案1】:

您可以尝试通过多种不同的方式来阻止这种情况:

  • 验证码(您已经说过您不喜欢它,但它可能是最简单的解决方案)
  • 回答一些人容易回答但不是脚本的问题
  • 确保用户在提交之前已登录(假设他们必须注册)
  • 限速表单,使每个IP地址每N时间只能提交一次

【讨论】:

  • 我更喜欢会话和 IP 地址的组合。但 +1 提供多种解决方案。
【解决方案2】:

您可以使用Akismet,它不使用验证。

【讨论】:

  • 很好的解决了这个问题。
【解决方案3】:

为避免验证码,您可以过滤 IP,例如每天最多允许来自同一 IP 的 10 条消息。

每次有人发送消息时,都会存储 ip 并在数据库中增加一个计数器。

【讨论】:

    【解决方案4】:

    验证码是防止这种情况的一种非常常见的方法(出于一个很好的理由,您应该考虑一下)

    如果不是,你可以设置一个 cookie 并检查它是否设置,如果是,禁止发送邮件,或者将 ip 记录在文件或数据库中并检查 ip 上次发送邮件的时间,如果不同是足够小,不允许发送邮件

    【讨论】:

    • -1 他只是说他知道他可以实施验证码,但不想要。这更适合作为评论。
    【解决方案5】:

    最简单的做法是让表单提交(或呈现)需要执行 javascript。对于任何安装了 NoScript 的人来说,这有点反社会,但大多数自动化脚本将无法处理它。

    【讨论】:

    • 有点错误的答案。自动化脚本将 POST 请求直接发送到页面。 JS 不会做任何事情来帮助他的轰炸。
    • 如果获取有效 POST URL 的唯一方法是执行一些 JS,那么它就可以了。
    • 您暗示帖子 URL 每次刷新都会更改,这非常丑陋。您增加了合法用户甚至可能无法使用的解决方案的开销。
    • 没有一个优雅的方法可以解决这个问题。任何解决方案都会涉及某种丑陋。
    • 伤害你的合法用户和你的资源比需要的更丑陋。
    猜你喜欢
    • 2018-09-08
    • 1970-01-01
    • 2010-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-29
    相关资源
    最近更新 更多