2011-04-25 38 views
6

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

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

+0

您可以使用'$ _SESSION'来保存上次提交联系表单的时间以及此会话期间提交的数量。当计数高于3并且上次时间低于5分钟前时,发布警告并上次更新以防止发生垃圾邮件。 – Khez 2011-04-25 22:24:27

+1

@Khez只有在客户端处理cookies时才有效。如果没有,那么将为每个请求创建一个新的会话。我不认为这是垃圾邮件的证据。 – 2011-04-25 22:50:16

+0

@詹姆斯真实,这就是为什么我只评论和没有回答。只是试图将他推向正确的方向。 – Khez 2011-04-25 22:52:47

回答

10

您可以尝试在不同方式的数量:

  • CAPTCHA(你已经说过你不喜欢它,但我T的可能是最简单的解决方案)
  • 回答一些样的问题,这很容易让一个人来回答,但不是脚本
  • 确保用户已登录,然后才能提交(假设他们有需注册)
  • 速率限制的形式,使每个IP地址只能提交一次
+0

我更喜欢会话和IP地址的组合。但+1提供多种解决方案。 – Khez 2011-04-25 22:27:55

0

一个验证码是为了防止这样的(和一个很好的理由,你应该想想)

如果不是你可以设置一个cookie,并检查其是否设定一个非常普遍的方式,如果是,不允许发送邮件或将IP记录在文件或数据库中,并检查IP最后发送邮件的时间,并且如果差异足够小,请禁止发送邮件

+0

-1他只是说他知道他可以实现验证码,但不需要它。这更适合作为评论。 – Khez 2011-04-25 22:25:56

1

每隔N个时间段内为了避免验证码,就可以过滤IP,例如允许每天最多10个消息来自同一个IP。

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

0

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

+0

一种错误的答案。自动脚本将POST请求直接发送到页面。 JS不会做任何事情来帮助他的轰炸。 – Khez 2011-04-25 22:29:35

+0

如果获得一个有效的POST URL的唯一方法是执行一些JS,那么它就可以工作。 – regularfry 2011-04-25 22:40:44

+0

你意味着帖子的URL会随着每次刷新而改变,这是非常丑陋的。您将开销添加到您的合法用户甚至无法使用的解决方案。 – Khez 2011-04-25 22:53:53

4

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

+1

+1 akismet是由纯爱 – 2011-04-25 22:33:42

+0

非常好的解决这个问题。 – daganh 2011-04-26 00:31:16