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

2024-01-05

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

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

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

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

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

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


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

  1. 它很丑。
  2. 这对你的用户来说很烦人。您不应该让他们不辞辛苦地使用您的网站。

There are some alternatives which are very simple, can be very effective and are entirely transparent to (almost all) users.

  1. 蜜罐领域:在表单中添加一个具有通用名称(如“网站”)的字段。在它旁边,添加一个标签,说明“不要在此框中写入”。使用 Javascript 隐藏输入和标签。当您收到表单提交时,如果字段中有任何内容,请拒绝输入。

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

  2. 自动假验证码: 和上面的类似。添加一个带有标签的输入字段“写下‘亚历克斯’” http://www.alexanderdickson.com/blog/2009/11/the-success-of-my-anti-spam-measure/(例如)。使用 Javascript(并且知道大多数自动垃圾邮件机器人不会运行 JS),隐藏该字段并用“Alex”填充它。如果提交的表单没有魔法词,则忽略它。

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

这将保护您免受 99.9% 的自动垃圾邮件机器人的侵害。它无法保护您免受有针对性的攻击,哪怕只有一点点。有人可以自定义他们的机器人以避免蜜罐或始终填写正确的值。


关于暴力破解:显然,服务器端解决方案是实现这一目标的唯一可行方法。对于我当前的一个项目,我实现了一种与您所描述的非常相似的强力保护系统。正是基于此暴力保护插件 http://bakery.cakephp.org/articles/view/brute-force-protection对于 CakePHP。

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

  1. 用户请求某些操作(例如重置密码)
  2. Run: DELETE * FROM brute_force WHERE expires < NOW()
  3. Run:

    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 个。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PHP:反洪水/垃圾邮件系统 的相关文章

  • Google Analytics PHP(发送信息)

    大意 我正在开发一个项目 我需要使用 Google Analytics 服务器端 我不需要检索信息 但我需要发送信息 我最终可以发送 js 脚本客户端 但在这种情况下它不是一个选项 以下大多数链接都非常旧 2012年 检索 不是我需要的 我
  • 如何使用 Vim 和 Eclipse 提高 PHP5.3 项目的工作效率(可能使用 Eclim 与 Zend Studio 集成)

    在开发应用程序时 我总是努力提高生产力 在过去的几年里 我可以说我在提高生产力方面取得了良好的进展 但我仍然发现我需要更多的工具或方法 我需要更快地编辑并学习盲打 目前正在过程中 因此我发现需要转向 Vim 现在已经一年多了 我已经放弃了
  • 上传非常大的文件(>5GB)

    我需要你的帮助 我想用 HTML JQuery 和 PHP 创建一个上传脚本 是否可以编写一个可以上传非常大的文件 gt 5 GB 的脚本 我已经尝试使用 FileReader FormData 和 Blobs 但即使使用这些 我也无法上传
  • PHP 变量、方法、类等名称中的有效字符是什么?

    您可以在 PHP 变量 常量 函数 方法 类等名称中使用哪些有效字符 说明书上有some http php net manual en language oop5 basic php mentions http www php net ma
  • 如何在MySQL选择查询中编写正则表达式?

    我尝试过这个表达 b word w b i比较一个word对照其他单词列表来查找重复项 我用了preg math all 效果很好 我想做同样的事情 但这次检查从 mysql 数据库检索到的单词 这是我写的 SELECT FROM tabl
  • 某些表格后的分页符

    我的问题是 我有一个页面 其中包含几个要打印的 html 表格 有些表有很多行 有些则没有 我想要做的是将第一个和第二个表 大表 打印在单独的页面中 其余表 小表 每页打印两个 如何在我想要的位置放置分页符 我试过 但这会在每个表格后面添加
  • Laravel 6:尚未设置外观根

    经过一段时间的努力 我已将我的网站从 Laravel 5 8 迁移到 Laravel 6作曲家更新我在网站上遇到此错误 并且仅使用命令PHP工匠 PHP Fatal error Uncaught RuntimeException A fac
  • Facebook PHP API 登录时抛出异常

    我尝试使用 Facebook Graph API 登录并获取用户信息 我用来获取用户信息的代码以前可以工作 但今天我尝试使用 Facebook 登录 但 Facebook API 抛出此错误 未定义的偏移量 1 home vendor fa
  • 更新查询增量字段加上 1 codeigniter 函数 [重复]

    这个问题在这里已经有答案了 我想在 codeigniter 项目中将字段值增加到当前值加 1 所以 我做了一个功能 但它不起作用 我的职能是 function increse field by 1 table name fieldToInc
  • PHP date_sun_info 错误时间

    我正在尝试使用 PHPdate sun info函数获取全天太阳某些位置的时间信息 目前我正在使用类似于中的代码文档 http php net manual en function date sun info php sun info da
  • PHP mail() 函数发送电子邮件,但需要 10 多分钟才能显示

    因此 我的用户从手机上的 Android 应用程序进行注册 注册成功后 我会触发一封邮件发送到注册的电子邮件地址 其中包含来自我的 PHP 脚本的激活密码 这是我使用的代码行 非常简单 mail to subject message hea
  • 一个表单包含两个提交按钮,每个按钮都有不同的操作

    我花了几个小时试图找到问题的解决方案 但似乎找不到正确的解决方案 提前感谢你的帮助 我有一个 html 表单
  • 我可以在 Laravel 5.2 中创建一个继承自 User 的新类吗?

    我对 Laravel 还很陌生 使用的是迄今为止的最新版本 5 2 因此我遇到了以下困境 我知道 Laravel 附带了一个User开箱即用的类 但我想开发一个系统 在其中我可以有另外两种类型的用户 称为Researcher and Adm
  • 使用 PHP 和 jSON 从 MySQL 获取 UIImage

    我正在开发一个小型新闻阅读器 它通过对 URL 执行 POST 请求来从网站检索信息 响应是一个带有未读新闻的 JSON 对象 例如 应用程序上的最新新闻的时间戳为 2013 03 01 当用户刷新表时 它会发布 domain com ap
  • 重定向到另一个文件夹

    我读了这个 htaccess 重写以将根 URL 重定向到子目录 https stackoverflow com questions 990392 htacces rewrite to redirect root url to subdir
  • 如何将事件插入为 - Out Office

    我目前正在使用 Google Calendar API 并尝试在我的谷歌日历中插入新的 外出 事件 我使用以下代码插入事件 client getClient service new Google Service Calendar clien
  • 如何找出当前正在运行的 PHP 可执行文件?

    在 PHP 程序内部 我想知道执行它的二进制文件的位置 Perl 有 X以此目的 PHP 中有等效的吗 这样它就可以使用自身执行子 PHP 进程 而不是硬编码路径或假设 php 是正确的 UPDATE 我使用的是lighttpd FastC
  • 无法下载 Windows 版 Composer SSL:握手超时

    这是我尝试安装 Windows 版 Composer 时得到的结果 The https getcomposer org versions https getcomposer org versions 无法下载文件 SSL 握手超时 无法启用
  • TCPDF - 来自 mysql 的打印表显示重复的第一行

    我是 TCPDF 的新手 我面临的小问题是所有输出数据都显示同一行 我的意思是第一条记录重复数据库中存在的总数据 行 的次数 这是我的代码 tbl header
  • Cakephp - CSRF 令牌不匹配

    我在 Cakephp 3 6 中有一个项目 其中 MessageController 中的 3 个操作由 Ajax 调用 但是 我有一个问题 当我向其中一个操作发送请求时 XHR 会向我返回以下内容 message CSRF token m

随机推荐