2010-09-21 42 views
6

我来到一家公司,该公司已经有一个完全成长的项目......但是在我之前工作过的编码器没有遵循约定,也没有使用参数化的SQL查询......因此,结果已经结束1000个地方在一个非常大的项目,可能容易受到SQL注入...检测SQL注入

我需要找到一个解决方案,将自动检测代码中是否有SQL注入。因此,例如,有一种表单允许用户输入关于产品的注释,该注释将在提交时发送到数据库......我们如何确保用户不会输入有害的查询而不是正常的文本?

是否有任何高级代码/正则表达式/魔法可以检测到该文本是否包含一段SQL查询而不是普通的无害文本?我会接受任何链接,任何语言的代码片段,甚至商业软件都可以为我做到这一点。

谢谢

+2

写什么项目? – 2010-09-21 20:17:32

+0

代码是用VB.Net编写的 – 2010-09-21 20:22:06

+1

如果你有1000个可能成为问题的地方,那么值得寻找自动化的方法来编辑代码来使用参数化查询。 – 2010-09-21 20:25:36

回答

7

这里没有银弹。 SQL注入可能会以许多模糊的形式出现,并试图使用正则表达式或防火墙中的其他形式来检测它们,或者应用程序可以保护您免受最简单的SQL注入形式的侵扰,但经验丰富的黑客只会简单地通过。正如AdaTheDev已经提到的那样,检查你的代码的自动化工具,比如MS代码分析工具,可能会给你一个启动的机会,但是又没有银弹。你将需要通过你的整个应用程序。

当这是很多工作,你应该制定一个计划。首先,制定一个指导方针,说明如何减轻这些类型的攻击。还可以尝试将应用程序分成几部分,从非常关键到不太重要。通过这种方式,您可以更好地估计修复错误的成本,并且可以让管理层决定可能的成本以及愿意承担的风险。未经身份验证的用户可以访问的部分应用程序是最关键的。如果每个人(全世界都可以)在您的应用程序中创建一个帐户,那么这些用户可以访问的所有功能都非常关键。人口越少,越是信任这些用户,风险就越小。稍后您可能会脱离修复这些部分。但永远不要低估一个好黑客。他/她可能会损害具有高权限的用户帐户,并开始使用该帐户测试SQL注入可能性。

总是试图在防守战略中有一个防守,有多个(或多个)防守层。例如,请不要在应用程序中以SA连接数据库。创建一个只需要特权的帐户,甚至可以创建多个SQL帐户,每个角色(或每个角色组)一个帐户。虽然限制数据库的权限对于缓解风险有很大帮助,但再次强调,不要将其视为单一防御层。例如,This article解释了黑客在能够执行SQL注入时如何滥用较低权限的帐户。

您在这里问这个问题是令人钦佩的,因为过去我见过很多开发人员,他们只是不想知道,这很可怕,因为企业经常信任开发人员(这很可怕好)。

祝你好运。

0

我举双手赞成你愿意深入探索并解决的事情,而不是只是耸耸肩说,“EHH ..没有人会攻击反正我们的网站。”

我认为,也许最好的方法是假设他们是无辜的,全面消毒投入。问题是,可能有合法理由让某人输入任何可能触发SQL注入的字符。

只是试图检测这种模式将受到误报'攻击'结果;也许有人试图寻找john's car,完全不知道单引号可能是'坏'。也许他们确实需要寻找。或者,你有什么...

+0

我同意。在安装闹钟之前开始查看这些窗口! – 2010-09-22 06:36:00

0

你需要检查变量传递到SQL字符串的任何地方。对于字符串值,您必须用双引号替换单引号的每个实例。对于非字符串值(将传递给SQL的引号),您必须确保它们是强类型的。

E.g.不要通过像"SELECT * FROM Users WHERE UserID = " + my_string_user_id这样的东西。相反,请使用代码"SELECT * FROM Users WHERE UserID = " + userId_as_int

当我有一个类似的代码库而没有参数化查询的时候,这个工作就回来了。

+0

更糟糕的是在'sa'下运行SQL访问(连接字符串用户)。 – 2010-09-22 06:38:41

4

为了真正做到这一点,您需要将应用程序分开,然后通过一个模块/页面/类/一次完成任何操作。

这将使您不仅可以解决问题,而且可以更加熟悉代码库。

UPDATE
基础上的评论,我想补充一点:

的工具可以做的是说一下,这里的唯一事情是一些unsanitized投入......其中,最有可能的是将在你的应用程序中的每一个查询。这意味着您将拥有约3000个左右需要修复的文件列表。

在这一点上,你唯一能做的就是指定一天,比如星期五,作为Fix Sql Day。划分工作,然后让每个人花费一天(甚至几个小时)在几页上重写查询。

在某些时候,你会完成或找到足够的其他事情来确定是否重新开始是一个好主意。

+0

当存在1-300个文件时,这是一个好主意......因为我们有超过3000个文件,其中一半可能包含严重写入的SQL ......不幸的是要花费一个多月的时间才能修复所有文件......我们的口袋里没有那么多时间。 – 2010-09-21 20:38:14

3

你可以给MS Code Analysis Tool一抡这(报价):

CAT.NET是一个二进制代码分析工具 ,帮助识别 某些现行漏洞 常见的变异,可引起常见的攻击 向量,如跨站点脚本 (XSS),SQL注入和XPath 注入。

从来没有用过它,但可能值得一试。