lam*_*mas 11 php security spam brute-force flooding
我实际上正在开发一个PHP项目,它将具有用户系统(登录,注册,发送丢失的密码到电子邮件,......),我认为这可能非常容易受到暴力攻击和/或垃圾邮件的攻击(发送一个密码到某人的电子邮件,如1000次等,使用你的幻想).
实施反垃圾邮件/洪水系统的最佳方式是什么,例如:我希望页面不能每分钟调用两次以上,但是另一页可能每分钟调用100次左右.
我肯定要存储IP地址,他们上次访问某个页面的时间以及某个地方的访问次数 - 但它是否足够有效将其存储在文本文件/数据库(MySQL)中
我应该使用验证码来注册/恢复丢失的密码吗?
"文本"验证码是否可行?(比如"什么是5加9减2?")
该页面将不被那么多用户(100-200)使用,我实际上是否必须实现所有这些东西?
nic*_*ckf 20
关于CAPTCHA:我建议不要使用CAPTCHAs,除非你真的需要它.为什么?
有一些替代方案非常简单,可以非常有效并且对(几乎所有)用户完全透明.
蜜罐字段:使用常用名称(如"网站")为表单添加字段.除此之外,添加一个标签,说明"不要在此框中书写"的效果.使用Javascript隐藏输入和标签.当您收到表单提交时,如果该字段中有任何内容,请拒绝输入.
拥有JS的用户将无法看到它并且会很好.没有JS的用户只需遵循简单的指令即可.Spambots将为它而堕落并揭示自己.
自动仿CAPTCHA:这与上面类似.添加一个带有标记"Write'Alex'"的输入字段(例如).使用Javascript(并且知道大多数自动垃圾邮件机器人不会运行JS),隐藏该字段并用'Alex'填充它.如果提交的表单中没有魔术词,则忽略它.
拥有JS的用户将无法看到它并且会很好.没有JS的用户只需遵循简单的指令即可.Spambots不知道该怎么做,你可以忽略他们的输入.
这将保护您免受99.9%的自动垃圾邮件机器人的攻击.它即使在最轻微的情况下也不会做什么,可以保护你免受有针对性的攻击.有人可以自定义他们的机器人以避免蜜罐或总是填写正确的值.
关于暴力破解:服务器端解决方案显然是唯一可行的方法.对于我目前的一个项目,我实施了一个非常类似于你描述的强力保护系统.它基于CakePHP的这个Brute Force Protection插件.
该算法相当简单,但最初有点令人困惑.
DELETE * FROM brute_force WHERE expires < NOW()跑:
SELECT COUNT(*) FROM brute_force
WHERE action = 'passwordReset'
AND ip = <their ip address>
Run Code Online (Sandbox Code Playgroud)X那么告诉他们等一会儿.否则,运行:
INSERT INTO brute_force (ip, action, expires)
VALUES (<their ip address>, 'passwordReset', NOW() + Y minutes)
Run Code Online (Sandbox Code Playgroud)这将允许用户仅在Y分钟内尝试重置密码X次.根据需要调整这些值.5分钟内可能有3次重置?此外,您可以为每个操作设置不同的值:对于某些内容(例如:生成PDF),您可能希望在10分钟内将其限制为10.