PHP:防洪水/垃圾邮件系统
实际上,我正在从事一个PHP项目,该项目将具有一个用户系统(登录、注册、向电子邮件发送丢失的密码等等),我认为这可能非常容易受到暴力攻击和/或垃圾邮件(向某人的电子邮件发送密码1000次,等等。使用你的幻想)PHP:防洪水/垃圾邮件系统,php,security,spam,brute-force,flooding,Php,Security,Spam,Brute Force,Flooding,实际上,我正在从事一个PHP项目,该项目将具有一个用户系统(登录、注册、向电子邮件发送丢失的密码等等),我认为这可能非常容易受到暴力攻击和/或垃圾邮件(向某人的电子邮件发送密码1000次,等等。使用你的幻想) 今天的web服务器(Apache、IIS)是否有某种针对暴力的内置防御 实施反垃圾邮件/泛滥系统的最佳方式是什么,例如:希望一个页面每分钟调用次数不能超过两次,但另一个页面每分钟最多调用100次左右 我肯定要存储IP地址、他们上次访问某个页面的时间和某处的访问次数,但将其存储在文本文
- 今天的web服务器(Apache、IIS)是否有某种针对暴力的内置防御
- 实施反垃圾邮件/泛滥系统的最佳方式是什么,例如:希望一个页面每分钟调用次数不能超过两次,但另一个页面每分钟最多调用100次左右
- 我肯定要存储IP地址、他们上次访问某个页面的时间和某处的访问次数,但将其存储在文本文件/数据库(MySQL)中是否足够高效
- 我应该使用CAPTCHA来注册/恢复丢失的密码吗
- “文本”验证码是否可行?(类似于“5加9减2等于多少?”)
- 页面不会被那么多用户使用(100-200),我真的需要实现所有这些吗
存储IP地址是记录和跟踪的好方法,但我认为只要验证码就可以停止垃圾邮件、暴力攻击和洪水泛滥
Recaptcha确实是一个很好的解决方案。除了按照Gazler的指示进行操作外,您还应该有一些方法来计算登录尝试次数。如果所有登录尝试的总数大于X,那么要么开始使用sleep命令,要么就说服务器有高负载。当然,您的目标受众可能不多,但如果是在公共域中,那么它很容易受到攻击 现在文本验证码很容易破解相信我
对于反垃圾邮件/洪水系统,您可以记录IP地址(最好是MySQL)并添加登录重试的时间限制,关于CAPTCHA:除非您真的需要,否则我建议不要使用CAPTCHA。为什么?
关于暴力拦截:服务器端解决方案显然是唯一可行的方法。在我当前的一个项目中,我实现了一个蛮力保护系统,非常类似于您所描述的。CakePHP就是以此为基础的 算法相当简单,但最初有点混乱
DELETE*FROM brute\u force WHERE expires
SELECT COUNT(*) FROM brute_force
WHERE action = 'passwordReset'
AND ip = <their ip address>
这将允许用户在Y分钟内仅尝试重置密码X次。根据需要调整这些值。也许5分钟内重置3次?此外,每个操作可能有不同的值:对于某些事情(例如:生成PDF),您可能希望在10分钟内将其限制为10。不要尝试在PHP中实现所有逻辑-堆栈中实现的逻辑越低,处理的效率就越高 大多数防火墙(包括BSD/Linux上的iptables)都有连接限制。另外,请看一看用于DDOS/暴力攻击预防的mod_security 你应该围绕这样一个理念来设计你的应用程序,即此类攻击不会让攻击者访问应用程序-最终你无法阻止DOS攻击,尽管你可以限制其有效性 依靠来自攻击者的一致IP地址没有多大价值——有很多方法可以绕过它 e、 g.跟踪每个用户登录之间的密码重置请求数。在密码重置表单中,如果用户提交未知的电子邮件地址,则以完全相同的方式(向客户端)响应。记录无效的电子邮件地址 嗯 C.我同意你的回答。极限
INSERT INTO brute_force (ip, action, expires)
VALUES (<their ip address>, 'passwordReset', NOW() + Y minutes)