短篇故事:我有一个网络应用程序,它具有巨大的参与动机。因此,我们正成为脚本编写者和机器人的重点攻击目标。根据提交内容的 IP 地址(超过 1000 个,并且还在不断增长,没有任何模式),我倾向于相信提交内容是由机器人网络生成的。更糟糕的是,控制自动提交的人正在积极地追求事情,以至于每次我们做出更改时,他们都会在几个小时内 catch 。
我们已经尝试过的一些措施:
- 验证码,包括第三方验证码和自行开发的验证码,具有不同程度的可读性
- 通过 Cookie 和隐藏表单字段发送的防请求伪造 token ,并在提交时进行比较
- 隐藏的空蜜 jar 字段,如果该字段包含数据,则会导致提交静默失败
- 默认情况下包含数据的隐藏蜜 jar 字段,如果未运行一段 javascript 来清除该字段的值,则会导致静默失败
- 限制特定时间段内按 IP 地址提交的内容
- 阻止已知由自动化脚本使用的电子邮件域
- 根据防火墙上的并发连接数或每分钟连接数来阻止主机
- 在防火墙上阻止最明显的 IP 地址
- 使用外部地址验证服务来验证传入地址
即使采取了所有这些措施,提交的内容不仅仍在继续,而且频率似乎还在增加,每天大约有 100,000 多个。
伪造的条目现在使用完全有效的名字和姓氏,并且显然已经诉诸于使用某种目录列表来确保他们使用的地址(顺便说一句,这些地址看起来完全随机且根本不一致)实际上是有效的美国邮政地址。此外,我已将传入的表单值记录到调试日志中,并验证它们实际上提交了有效的验证码,表明它们具有足够好的 OCR 来破译图像(代码本身永远不会发送到客户端,只有代表存储在后端其他地方的代码)
事实上,我们判断这些条目是否伪造的唯一方法是通过他们提交的电子邮件地址和域的模式。我们已尝试阻止最活跃的域进入,但垃圾邮件发送者只是创建或查找新域,从中生成一次性电子邮件地址并继续攻击。
此时我已经很疲惫了,但我确信一定有一些东西我还没有尝试过。这里有人有什么好主意吗?
最佳答案
问题是:由于仅“注册”到您的网站,用户会立即获得太多权限。用户被信任“太快”了。
看看stackoverflow - 你可以注册,一开始你几乎没有获得任何权利。一段时间后,用户权限级别会增加,因为对用户的信任会增加,因为用户正在做什么,并且其他用户会接受这一点。
我会专注于让用户“信任”一种“可构建的资源”,其他用户必须确认特定用户的“权限级别”。那么自动注册用户就没有任何意义——他们什么也做不了。
我不知道您的网站是关于什么的 - 这可能会让我的建议不被接受...但我希望我能让您继续思考:)
关于security - 如何应对僵尸网络和自动提交,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6892667/