我同意正确的输入验证是防止SQL注入的唯一“防伪”方法,但是它需要修改现有应用程序中的大量代码,可能需要重新构造设计糟糕的应用程序。
学术界对防止SQL注入的自动化机制有很多兴趣(我已经做了一项文献调查,至少看到了20篇),但我还没有看到任何实际实现的东西。
有没有人知道任何在学术环境之外实际使用的框架,无论是基于签名的,基于异常的,还是其他的?
编辑:我在寻找没有修改代码库的东西。
发布于 2011-02-12 05:57:42
我为之工作的公司使用Barracuda Web应用程序防火墙来实现你所说的。据我所见,效果相当好。基本上,如果它检测到可疑输入,它就会将用户重定向到我们选择的页面。这允许您在internet和应用程序之间放置一个层,并且不需要您更改任何代码。
也就是说,不保护您的应用程序是个坏主意。
发布于 2011-02-12 06:19:08
如果您不打算修改您的代码,那么您只能拦截请求。由于没有好的或坏的SQL命令,所以在选项上非常有限,但是可以尝试拒绝从单个字符串发起的多个查询。换言之:
LEGAL
SELECT * FROM foo WHERE bar='baz';非法
SELECT * FROM foo WHERE bar=''; DELETE * FROM foo; SELECT 'baz';由于几乎每一次注入攻击都需要一个请求中的多个查询,并且如果您的应用程序不需要这个特性,那么您就可以不使用这个特性了。它可能不会捕捉到每种类型的攻击(使用子查询和函数可能会造成很大的伤害),但它可能总比没有好。
发布于 2011-02-22 05:36:06
在修补像SQL注入这样的漏洞时,保持代码不受影响的唯一方法是使用像开源项目安全性这样的web应用程序防火墙。最近,甲骨文发布了一个数据库防火墙,用于过滤讨厌的查询。这种方法更好地解决了SQL注入问题,但它可以解决所有问题。
WAF是非常有用和免费的,如果你不相信它,把它测试一下。
WAF只是一层。您还应该在它下面使用测试应用程序*。这是一种深度防御方法。
*这是我以有限的免费优惠出售的服务。
https://stackoverflow.com/questions/4976581
复制相似问题