資料庫多個字串欄位(varchar、nvarchar、text 等)被大量植入惡意 <script> 標籤或 iframe,需批次移除。
DECLARE @t VARCHAR(255), @c VARCHAR(255);
DECLARE @str VARCHAR(500) = ''; -- 要移除的惡意片段
DECLARE @str2 VARCHAR(500) = ''; -- 取代為空字串
DECLARE table_cursor CURSOR FOR
SELECT a.name, b.name
FROM sysobjects a
JOIN syscolumns b ON a.id = b.id
JOIN systypes c ON b.xtype = c.xtype
WHERE a.xtype = 'U' -- 使用者資料表
AND c.name IN ('char','nchar','varchar','nvarchar','text','ntext');
OPEN table_cursor;
FETCH NEXT FROM table_cursor INTO @t, @c;
WHILE @@FETCH_STATUS = 0
BEGIN
EXEC('UPDATE [' + @t + '] SET [' + @c + '] = REPLACE(CAST([' + @c + '] AS VARCHAR(8000)), ''' + @str + ''', ''' + @str2 + ''')');
FETCH NEXT FROM table_cursor INTO @t, @c;
END
CLOSE table_cursor;
DEALLOCATE table_cursor;
REPLACE,將指定惡意字串替換為空值。CAST(... AS VARCHAR(8000)) 處理 text/ntext 型別(舊版相容)。MAX 長度欄位,VARCHAR(8000) 可能截斷;SQL 2005+ 建議改用 VARCHAR(MAX)。@str 或改用 PATINDEX/REGEX(CLR)掃描。此腳本可快速清理已受感染資料庫,但務必同步修補應用層漏洞,才能根治。