2012-03-29 75 views
2

我有一个SQL Server 2005数据库托管在共享主机环境。不幸的是,在过去的几个月中,我一直在使用我的数据库中现有文本附加的恶意脚本和html标签来处理应用程序。Malscript注入SQL Server 2005数据库

的文本被注入几乎看起来像

"script src=http://somehostname/r.php ></script>" 

我使用IIS 7和启用的requestFiltering。但是这次袭击仍然非常严重。我怎样才能防止我的数据库从这种攻击?

在此先感谢。

回答

0

是将数据提交到您的表应该剥夺任何应用程序这是一个很好的做法。当然,并非所有的应用程序都可以。

如果你不使用存储过程,我建议你创建的INSERT和更新数据库表中的触发器,并检查是否任何非法串试图进入,如果他们这样做,拒绝该行。 SQL有一些字符串操作关键字,如CHARINDEX,我个人会检查常见的字符,如“\”“;”,“$”,“&”等

我也想尝试并筛选出任何有已经进入你的表和删除的行:

DELETE FROM Table 
WHERE Field LIKE '%<script>%' 

另外,如果你使用一个存储过程,每个字段作为参数传递,然后这些字符不会进入你的数据库。

CREATE TRIGGER [dbo].[tr_CheckSQLInjection] 
ON [dbo].[Notes] 
FOR INSERT, UPDATE 
AS 

BEGIN 


BEGIN TRANSACTION T_CHECKCHARACTERS 

BEGIN TRY 

-- YOUR LOGIC TO STRIP OUT THE CHARACTERS HERE 

    COMMIT TRANSACTION T_CHECKCHARACTERS 

END TRY 

BEGIN CATCH 

    RAISERROR('UNABLE TO COMMIT THE TRANSACTION', 1, 1) 

    ROLLBACK TRANSACTION T_CHECKCHARACTERS 

END CATCH 

END 
+0

达伦, 我认为它是一个伟大的想法在这方面bcoz我使用传统的ASP和asp.net没有存储过程在一起。不幸的是,我不熟悉这个触发器。你能把我连接到一个很好的例子吗? – 2012-03-29 08:03:55

+0

触发器:http://www.sqlteam.com/article/an-introduction-to-triggers-part-i 我编辑我的帖子,包括一个例子太多。 – 2012-03-29 08:06:42

+0

我也建议阅读SQL注入,就像其他人提到的一样。 – 2012-03-29 08:12:08

4

这通常是一个SQL注入攻击。

这包括添加报价或SQL代码为有效的用户输入。

你确定你usings他们在你的查询之前逃脱你DATAS的所有恶意字符?

看看http://en.wikipedia.org/wiki/SQL_injection

3

看来你没有使用参数化的存储过程,并从正在通过SQL注入攻击的一些基本的预防。

请通过下面的链接了解更多: Protect From SQL Injection in ASP.NETPreventing SQL Injection Attacks

那么对于传统的ASP这个链接会值得你:SQL Injection in Classic ASP and Possible Solutions

+0

它是一个传统的经典ASP应用程序,几个asp.net页面用于后台任务。是的,asp应用程序没有存储过程,它有内联sql命令用于从db中检索数据。 – 2012-03-29 07:59:48

+0

@LibinTK:请看我的编辑,我给了一个新的链接。 – 2012-03-29 08:06:38

+0

感谢@Ashwini,让我通过它去...... – 2012-03-29 08:11:13

相关问题