PHP:反洪水/垃圾邮件系统

标签 php security spam brute-force flooding

我实际上正在开发一个以用户系统为特色的 PHP 项目(登录、注册、将丢失的密码发送到电子邮件等),我认为这可能非常容易受到暴力攻击和/或垃圾邮件(将密码发送到某人的电子邮件 1000 次等。使用您的幻想) .

  • 当今的网络服务器(Apache、IIS)是否具有某种针对暴力破解的内置防御措施?
  • 实现反垃圾邮件/洪水攻击系统的最佳方式是什么,例如:希望一个页面不能在一分钟内被调用超过两次,但是另一个页面可能被调用最多每分钟 100 次左右。

    • 我肯定需要存储 IP 地址、他们上次访问页面的时间以及某处的访问次数 - 但将其存储在文本文件/数据库 (MySQL) 中是否足够有效

    • 我应该使用验证码来注册/找回丢失的密码吗?

    • “文本”验证码是否可行? (类似于“5 加 9 减 2 是多少?”)

    • 页面不会被那么多用户(100-200)使用,我真的必须实现所有这些东西吗?

最佳答案

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

  1. 它很丑。
  2. 这对您的用户来说很烦人。您不应该让他们跳过重重障碍来使用您的网站。

有一些非常简单、非常有效并且对(几乎所有) 用户完全透明的替代方案。

  1. 蜜 jar 字段:向您的表单添加一个通用名称(如“网站”)的字段。在它旁边,添加一个标签,上面写着“不要在这个盒子里写”的效果。使用 Javascript 隐藏输入和标签。当您收到表单提交时,如果该字段中有任何内容,则拒绝输入。

    使用 JS 的用户不会看到它并且会没事。没有 JS 的用户只需遵循简单的说明即可。垃圾邮件机器人会上当并暴露自己。

  2. Automatic faux-CAPTCHA:这与上面类似。添加一个带有标签的输入字段 "Write 'Alex'" (例如)。使用 Javascript(并且知道大多数自动垃圾邮件机器人不会运行 JS),隐藏该字段并用“Alex”填充它。如果提交的表单没有魔法词,则忽略它。

    使用 JS 的用户不会看到它并且会没事。没有 JS 的用户只需遵循简单的说明即可。垃圾邮件机器人不知道该怎么做,您可以忽略他们的输入。

这将保护您免受 99.9% 的自动垃圾邮件机器人的侵害。它不会做的,即使是最轻微的,也不会保护您免受有针对性的攻击。有人可以自定义他们的机器人以避免蜜 jar 或始终填写正确的值。


关于暴力破解:显然,服务器端解决方案是唯一可行的方法。对于我当前的一个项目,我实现了一个与您描述的非常相似的暴力保护系统。它是基于这个 Brute Force Protection plugin用于 CakePHP。

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

  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. 继续使用重置密码功能。

这将允许用户在 Y 分钟内仅尝试重置密码 X 次。根据需要调整这些值。也许 5 分钟内重置 3 次?此外,您可以为每个操作设置不同的值:对于某些操作(例如:生成 PDF),您可能希望将其限制为 10 分钟内 10 个。

关于PHP:反洪水/垃圾邮件系统,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2162502/

相关文章:

security - 一个 Guice 就绪的安全框架?

security - 如何使用 check 防止恶意 Meteor 订阅

java - 以编程方式创建电子邮件帐户

垃圾邮件中的 javascript;它想做什么?

php - 网站图标未显示

php - 如何在 MySQL 中查找所有子行?

php - htaccess 删除 www 并重定向到访问的 url

php - 删除开头的空行

java - "Invalid signature file digest for Manifest main attributes"在从源代码构建的 Java 上

email - 为什么我的网站电子邮件会进入垃圾邮件箱?