資料庫遭大量注入 <script src=https://...></script> 等惡意字串,需掃描所有使用者資料表的所有字元型欄位 (char, nchar, varchar, nvarchar, text, ntext) 並移除。
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
-- 動態 SQL:將欄位轉為 varchar(8000) 再 REPLACE (text/ntext 需轉型)
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
text/ntext 型別無法直接 REPLACE,需 CAST(... AS VARCHAR(8000)) (超過 8000 字元會截斷,SQL 2005+ 建議用 VARCHAR(MAX))@str 或改用 REPLACE(..., LOWER(...), ...) 等模糊比對UPDATE 權限