首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

清除 SQL 資料庫被注入惡意腳本的 T-SQL 腳本

     編輯:關於SqlServer

適用情境

資料庫多個字串欄位(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;

運作原理

  1. 游標遍歷所有使用者資料表的字串類型欄位。
  2. 動態 SQL 執行 REPLACE,將指定惡意字串替換為空值。
  3. CAST(... AS VARCHAR(8000)) 處理 text/ntext 型別(舊版相容)。

注意事項與強化建議

  • 備份先行:執行前務必完整備份資料庫。
  • 針對 MAX 長度欄位,VARCHAR(8000) 可能截斷;SQL 2005+ 建議改用 VARCHAR(MAX)。
  • 若惡意碼有變體,需調整 @str 或改用 PATINDEX/REGEX(CLR)掃描。
  • 修補應用程式參數化查詢、啟用 WAF、最小權限原則,防止再次注入。

此腳本可快速清理已受感染資料庫,但務必同步修補應用層漏洞,才能根治。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved