我已经递交了已注入恶意软件的MS SQL 2000数据库。 恶意软件脚本如下:无法从数据库行中删除注入的脚本
<script src=http://www.someAddress.ru/aScript.js></script>
现在我想从表中的行删除这段代码。
作为一个测试,我inputed < H1>测试</H1>某一行上,并成功运行了以下查询:
UPDATE myTable
SET description = REPLACE (description, '<h1>','')
WHERE id = 2;
这样取出h1标签。
但是,试图相同的脚本标签不起作用:
UPDATE myTable
set description = REPLACE (description, '<script src=http://www.someAddress.ru/aScript.js></script>','')
WHERE id = 2
为什么这个不行?
UPDATE 2
WOHO!我找到了解决方案! 我使用folloing代码,我发现这里:http://www.tek-tips.com/viewthread.cfm?qid=1563568&page=3
-- Look for open and close HTML tags making sure a letter or/follows < ensuring its an opening
-- HTML tag or closing HTML tag and not an unencoded < symbol
CREATE FUNCTION [dbo].[udf_StripHTML]
(@HTMLText VARCHAR(8000))
RETURNS VARCHAR(8000)
AS
BEGIN
DECLARE @Start INT
DECLARE @End INT
DECLARE @Length INT
SET @Start = CHARINDEX('<',@HTMLText)
SET @End = CHARINDEX('>',@HTMLText,CHARINDEX('<',@HTMLText))
SET @Length = (@End - @Start) + 1
WHILE @Start > 0
AND @End > 0
AND @Length > 0
BEGIN
SET @HTMLText = STUFF(@HTMLText,@Start,@Length,'')
SET @Start = CHARINDEX('<',@HTMLText)
SET @End = CHARINDEX('>',@HTMLText,CHARINDEX('<',@HTMLText))
SET @Length = (@End - @Start) + 1
END
RETURN Replace(LTRIM(RTRIM(@HTMLText)),' ',' ')
END
GO
要删除HTML标签/脚本,我运行以下查询:
UPDATE mytable
SET description = [dbo].[udf_StripHTML](description)
//WHERE id = 35;
这完美的作品。请注意,这个脚本删除了所有的html。因此,如果我只想删除<脚本,我只需将'<'替换为'<脚本'。
我首先想到的是换行... – 2009-10-29 16:23:58
@rexem:你能详细点吗? – Steven 2009-10-29 17:03:44