从SQL注入中获得防御的方法和技巧

时间:2010-03-05 21:57:10

标签: c# sql-injection

我有一些WinForms应用程序(用于开发一些简单应用程序的框架),用C#编写。我的框架稍后将用于开发win表单应用程序。其他开发人员经常,有时不使用参数 - 他们在代码中编写直接SQL。所以首先我需要以某种方式在C#中的框架基类中进行保护。 解决这个问题,一位开发人员建议我使用一个ORM,比如NHibernate,它会为你解决这个问题(而且你不必在大多数时间自己编写SQL语句)。 所以我想问一下,当我想从SQL注入中获得防御时,是否有一些通用的替代方案(其他方法和技术)。一些链接或示例会非常好。

4 个答案:

答案 0 :(得分:1)

我没有看到有什么方法可以保护任何基于SQL的库免受 developer 滥用而不会削弱其功能(即永远不会直接访问数据库)。

即使使用NHibernate或Linq to SQL,也可以绕过映射层并直接编写SQL语句。

就我个人而言,我认为您最好的选择是写 BIG BOLD TEXT ,使用您图书馆的人需要参数化他们的查询。如果做不到这一点,你可以尝试进行某种笨拙的输入清理,但这实际上是一种脆弱的二流黑客攻击。

参数化查询已经存在了很长时间,没有任何借口可以让任何人编写触及任何数据库的代码而不了解它或理解如何使用它。无知的唯一方法就是教育。

如果我们更了解这个图书馆在数据访问方面应该做些什么,我们可以提供更有针对性的建议......

答案 1 :(得分:1)

同意Aaronaught,一个框架不会完全阻止这种可能性。我永远不会在数据层上取代严格的验证。还提供围绕数据访问的抽象层,您将其作为API打开,而不是允许开发人员直接连接到数据库。

答案 2 :(得分:1)

听起来你需要训练你的开发人员使用参数绑定而不是寻找技术解决方案。

另一种替代方法是将数据库层保留在不同的项目中,并且只允许SQL资源开发人员在其中进行编码。 GUI可以位于不同的项目中。这样GUI程序员就不会搞砸你的数据库。

答案 3 :(得分:0)

安全通常是一个过程,而不是产品或API。 这也是一个不断发展的过程,我们必须适应或被黑客攻击。

严厉的做法: 您可以强制每个人编写存储过程,而不允许 从允许与之交谈的帐户直接访问表 数据库。 (GRANT EXECUTE ON等)

然后你需要确保没有人写任何花哨的存储过程 将sql查询作为参数并动态评估它。

这往往会减慢开发速度,我个人不会使用它, 但我曾在几家商店咨询过。