如何在SQL Server 2000中创建一个触发器来替换sql注入的<script>标记?</script>

时间:2008-12-08 20:04:44

标签: sql-server-2000 sql-injection

我有一些使用SQL Server 2000的旧数据库,他们在某些数据库字段的末尾使用javascript脚本标记获取SQL注入。我需要一个触发器去掉注入的更新,直到我有时间修复允许这个的前端。

我是SQL Server新手 - 请帮助!

5 个答案:

答案 0 :(得分:2)

我认为约束会更好。任何内容受损的内容都会被拒绝。

在字段上设置约束

CHARINDEX('<script>',[fieldname]) = 0

答案 1 :(得分:0)

类似的东西:

更新表
SET field = REPLACE(field,'&lt; / script&gt;',REPLACE(field,'&lt; script&gt;',''))
WHERE table.pk IN(SELECT pk FROM inserted WHERE field LIKE'%script&gt;')

答案 2 :(得分:0)

SQL Server 2000中是否有任何正则表达式的功能?脚本标签的内容不断变化。

答案 3 :(得分:0)

自4月以来一直有大规模的攻击,如果这就是你的话,你必须为数据库中的每个表添加一个触发器。 此脚本修改原始攻击代码以一次性清理所有内容,假设<script在db中的任何位置都不是有效文本:

DECLARE @T varchar(255),@C varchar(255) 
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('update ['+@T+'] set ['+@C+']=LEFT(['+@C+'], CHARINDEX(''<script'', ['+@C+'])-1)
WHERE CHARINDEX(''<script'', ['+@C+']) >0')
FETCH NEXT FROM Table_Cursor INTO @T,@C 
END 
CLOSE Table_Cursor 
DEALLOCATE Table_Cursor

此外,我听说您可以通过删除SELECTsyscolumns上的应用程序用户sysobjects权限来阻止此攻击,如果这是你的选择。您仍然需要修复漏洞以准备下一次攻击。

答案 4 :(得分:0)

修复数据后,您需要找到并修复注入进入数据库的方式。我认为你可能正在使用动态SQl。本文将帮助您修复它,以便注射不会成为问题 http://www.sommarskog.se/dynamic_sql.html