【发布时间】:2009-09-01 00:01:17
【问题描述】:
最近,由于未能清理提供给页面的查询字符串参数,我们客户的一个网站成为 SQL 注入攻击的牺牲品。易受攻击的代码已被识别并正在被纠正,但它让我想知道 MySQL 和 SQL Server 如何处理多查询字符串之间的一些差异。
易受攻击的代码在几十个网站上使用,其中两个在 SQL Server 上运行,其余在 MySQL 上。有了这段代码,我们以前从未遭受过注入攻击(上帝的恩典),但是一旦我们发布了在 SQL Server 上运行的两个网站(具有相同的代码库),该网站很快就被利用了。注入的方法很简单:
page.asp?param=1;delete from [some_table];
就像我说的,易受攻击的代码在许多网站上共享,但是如果我尝试在我们的 MySQL 网站上执行相同类型的注入,ASP 会抛出一个不错的服务器错误,让我们知道查询中存在错误:
SELECT * FROM Table1 WHERE ID = 1;DELETE FROM TABLE1;
进一步测试我能够验证 MySQL ODBC 3.51 驱动程序不允许在 ADODB.Connection 对象调用 Execute("") 时在同一语句中执行两个 SQL 查询,而 SQL Server Native Client (10.1 ) 运行两个并排查询没有任何问题。这实际上只是提供程序的一种配置,它使 SQL 服务器以这种方式易受攻击,而 MySQL 没有,还是源于其他地方?
【问题讨论】:
-
请问贵公司是如何解决这个问题的?
-
看一下support.microsoft.com/kb/200190的简单解释。
标签: mysql sql-server asp-classic sql-injection security