实际上,我在工作上的一个PHP项目,该项目将设有一个用户系统(登录、登记、发送丢失密码,以电子邮件,..),我认为这可以非常容易受到暴力攻击和/或垃圾邮件(发一个密码的人的电子邮件等1000倍,等等。用你的幻想) .

  • 今天做的网络服务器(Apache,IIS)拥有某种内置的防御反对暴力?
  • 什么是最好的方式来实施一个反垃圾邮件/洪水的系统,如果我例如:想要的一页不能被称为两个以上的时间一分钟,然而另一个页面上可以被称为达到100次一分钟左右。

    • 我肯定会有储存的IP地址、时间,当他们最后一次访问网页的访问量的地方-但会是有效的足够储存在一个文本的文件数据库(MySQL)

    • 我应该使用验证码之类的东西注册/回收丢失密码?

    • 是"文本"验证码是否可行?(类似于"什么是5加9减2?")

    • 该网页不会被使用的,许多用户使用(100至200),我实际上要实现所有这些事情?

有帮助吗?

解决方案

关于验证码: 我会建议反对使用验证码,除非你真的需要它。为什么?

  1. 这是丑陋的.
  2. 它是令人讨厌你的用户。你不应该让他们跳火圈的使用你的网站。

有一些替代办法,这是非常简单,可以非常有效地和完全透明 (几乎所有) 用户。

  1. 蜜罐的领域:增加一个领域,形式有一个共同的名称,如"网站"。在它旁边,添加一个标签说什么效果"不要写在这个盒子"。使用Javascript隐藏的输入和标签。当你接收的形式提交的,如果有任何在现场,拒绝该投入。

    用户与JS不会看到它,并将被罚款。用户不JS将只需要遵循简单的指令。垃圾邮件会对它,揭示自己。

  2. 自动仿验证码:这是与上述类似。添加输入领域与一个标签说 "写Alex'" (例如)。使用Javascript(和知道最自动化的垃圾邮件机器人不会运行JS)、隐藏的领域并填充它与亚历克斯'.如果提交的形式并不具有神奇的字眼,那么忽略它。

    用户与JS不会看到它,并将被罚款。用户不JS将只需要遵循简单的指令。垃圾不知道该怎么做,你可以忽略它们的投入。

这将保证你从99.9%的垃圾邮件自动化机器人。什么也不做,即使有丝毫的,是保护你免受有针对性的攻击。有人可以定制自己的机器人,以避免的蜜罐或总是填写正确的价值。


关于暴力阻止: 一个服务器的端解决方案的唯一可行的方式做到这一明显。我的一个项目,我实施了一个强力保护系统非常相似描述。这是基于这样的 暴力保护插件 为Cake.

算法是相当简单,但有一点令人困惑。

  1. 用户请求的一些行动(重新设置密码,例如)
  2. 运行: DELETE * FROM brute_force WHERE expires < NOW()
  3. 运行:

    SELECT COUNT(*) FROM brute_force 
    WHERE action = 'passwordReset'
    AND ip = <their ip address>
    
  4. 如果计数大于 X 然后告诉他们等待一段时间。
  5. 否则,运行:

    INSERT INTO brute_force (ip, action, expires)
    VALUES (<their ip address>, 'passwordReset', NOW() + Y minutes)
    
  6. 继续与重置的密码功能。

这将允许用户只是试图重新设置密码X次在Y分钟。调整这些价值观正如你看到的配合。也许3重置在5分钟吗?此外,您可以有不同的价值为每个行动:对于一些事情(如:产生PDF格式),则可能会希望限制它至10在10分钟。

其他提示

  1. 是的,保存一个IP地址,最后一次访问和次访问是在一个数据库将被罚款。
  2. 使用验证码的注册/恢复密码是建议使电子邮件地址无法被垃圾邮件。也停止野蛮的强迫。
  3. 是的,文本的验证码是可能的,虽然远的人更容易破解和编写脚本到实现自动化的答案。对于一个免费的验证,我建议 验证码.
  4. 这真的取决于你有多么关心安全。我当然推荐使用的验证,因为他们是容易实现。

不要试图实施 所有 逻辑,在你的PHP-下在你的筹码可以实现它,更有效地可以加以处理。

最防火墙(其中包括令在BSD/Linux)有连接的限制。此外,有一种看mod_security DDOS/暴力攻击的预防。

你的 应该 您的应用程序设计周围的想法,这种攻击将不会得到攻击者访问到应用程序,在一天结束时有没有办法你可以防止DOS攻击,虽然可以限制其有效性。

有没有一个很大的价值依靠一致的IP地址从你的攻击者有很多方法。

例如跟踪数的密码重置之间的请求登录由每个用户。在你的密码重置形式,应对(给客户)在 到底 同样,如果用户提交的一个未知的电子邮件地址。记录无效的电子邮件地址。

禾田

C.

除了做什么Gazler是告诉你你应该还有一些方式的计的登录尝试。它的总的所有登录尝试更大的然后X然后开始使用睡觉的命令,或只是说,服务器的具有高负荷。

储存的IP地址是良好的实践,用于登陆和跟踪,但我认为这只是一个验证将停止垃圾邮件,暴力攻击和洪水。

验证码确实是一个很好的解决方案。

当然,你的目标受众可能不大,但如果它是在公共领域,然后它是脆弱的,

文验证码是容易破解这些日子的相信我

对一个反垃圾邮件/洪水系统,你可以登录IP addressses(MySQL优选),并添加一个时间限制登录重试

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top