如何在不使用CAPTCHA组件的情况下阻止批量漏洞扫描?

时间:2009-05-11 17:11:48

标签: security

如何防止可以使用XSSME,SQLinjectMe(这两个是免费的Firefox附加组件),Accunetix Web扫描仪等大型漏洞扫描程序扫描表单?

这些“Web漏洞扫描程序”可以捕获表单及其所有字段的副本,并在几分钟内发送数千个测试,在字段中引入所有类型的恶意字符串。

即使您对输入进行了非常好的清理,服务器中也存在速度响应延迟,有时如果表单发送电子邮件,您将在接收方邮箱中收到数千封电子邮件。我知道减少此问题的一种方法是使用CAPTCHA组件,但有时这种组件对于某些类型的表单来说太多而且会延迟用户响应(例如登录/密码表单)。

有什么建议吗?

提前致谢并抱歉我的英语!

5 个答案:

答案 0 :(得分:5)

嗯,如果这是一个主要问题,您可以添加服务器端提交速率限制器。当有人提交表单时,请在数据库中存储有关其IP地址和提交表单的时间的一些信息。然后,每当有人提交表单时,检查数据库以查看自上次IP地址提交表单以来它是否“足够长”。即使是相当短的等待时间(例如10秒)也会严重降低这种自动探测的速度。这个数据库可以每天/每小时自动清除,不需要长时间保存数据。

当然,有权访问僵尸网络的人可以避免使用此限制器,但如果您的网站受到大型僵尸网络的攻击,则可能存在比此更大的问题。

答案 1 :(得分:1)

Theres只有这么多你才能做到......“哪里有你的意思”,你希望用户做的任何事都可以自动化和滥用。你需要在开发时找到一个中位数,并抛出一些可能使滥用更难的事情。

您可以做的一件事是使用哈希对表单进行签名,例如,如果表单是用于向另一个用户发送邮件,则可以执行此操作:

hash = md5(userid + action + salt)

然后当你实际处理响应时,你会做

if (hash == md5(userid + action + salt))

这可以防止滥用者注入1000个用户ID并轻松地向您的系统发送垃圾邮件。它只是攻击者跳过的另一个循环。

我喜欢听别人的技巧。 CAPTCHA应该用于注册等入口点。上面的方法应该用于对特定事物的操作(消息传递,投票,......)。

你也可以创建一个标记系统,用户在X时间内做任何可能看起来很腥的X次会标记用户,并让他们做一个CAPTCHA(一旦他们输入它们就不再被标记)。

答案 2 :(得分:1)

除了其他人提供的限速解决方案之外,您可能还希望在敏感页面和表单上实施一些日志记录或审核,以确保您的速率限制确实有效。它可能很简单,就像记录每个IP的请求数一样。然后,您可以发送每小时或每日摘要,以便随时关注事物,而无需反复检查您的网站。

答案 3 :(得分:1)

这个问题与其他关于验证码的问题不完全相同,但我认为如果您还没有这些问题,请阅读它们。 “Honey Pot Captcha”听起来可能对你有用。

答案 4 :(得分:0)

回顾所有答案我已经为我的案例定制了一个解决方案,每个解决方案都有一点:

我再次检查了已知漏洞扫描程序的行为。他们加载页面一次,并且收集的信息开始提交它,用恶意脚本更改字段的内容,以便验证某些类型的漏洞。

但是:如果我们签署表格怎么办?怎么样?使用存储在Session对象中的随机内容创建隐藏字段。如果提交的值超过n次,我们再次创建它。我们只需要检查它是否匹配,以及它是否只是采取我们想要的操作。

但是我们可以做得更好:为什么要改变字段的值,我们随机改变字段的名称?是的随机更改字段的名称并将其存储在会话对象中可能是一个更棘手的解决方案,因为表单总是不同的,并且漏洞扫描程序只加载一次。如果我们没有输入具有存储名称的字段,只是我们不处理表单。

我认为这可以节省大量的CPU周期。我正在使用问题中提到的漏洞扫描程序进行一些测试,它完美无缺!

嗯,非常感谢你们所有人,正如之前所说,这个解决方案只需要一点点回答。