2012-03-08 70 views
0

我主持的網站最近是SQL注入的,我想找到一種方法從數據庫中的特定列(註釋)中刪除有問題的注入代碼。使用SQL Server 2008,我不知道這是爲什麼不工作:從表列刪除部分文本

USE Dirty 
SELECT REPLACE(comments,'</title><script src=http://hjfghj.com/r.php ></script>','') 
FROM SALONS 
+0

什麼** datatype **是'評論'?? – 2012-03-08 21:46:25

回答

3

你只是選擇 - 不更新....

試試這個:

USE Dirty 

UPDATE dbo.Salons 
SET Comments = REPLACE(comments,'</title><script src=http://hjfghj.com/r.php ></script>','') 
WHERE (possibly a condition here...) 
+1

打我4秒! – msmucker0527 2012-03-08 21:48:25

+0

得到:Msg 8116,Level 16,State 1,Line 3 參數數據類型ntext對替換函數的參數1無效。 – user547794 2012-03-08 21:50:12

+1

您應該使用nvarchar(max)而不是ntext作爲列時間。 (請參閱http://msdn.microsoft.com/en-us/library/ms187993.aspx)根據您處理ntext列的方式,您可能必須更改相當多的代碼,但這將是值得的。 – 2012-03-08 22:33:24

2

你實際上沒有更新任何東西,只是選擇它。您需要創建更新聲明

USE Dirty 

UPDATE SALONS 
    SET comments = REPLACE(comments,'</title><script src=http://hjfghj.com/r.php ></script>','') 
+0

我收到了:消息8116,級別16,狀態1,行3 參數數據類型ntext對於替換函數的參數1無效。 – user547794 2012-03-08 21:51:03

-1

因爲列是導致錯誤的「ntext」。我設法解決這個使用像這樣的演員:

USE Dirty 
    UPDATE dbo.Salons 
    SET Comments = cast(replace(cast(comments as varchar(8000)),'</title><script src=http://hjfghj.com/r.php ></script>','') as ntext) 
+0

如果你這樣做 - 確保轉換爲'NVARCHAR(MAX)'!!!!否則,您將您的評論限制爲8000個字符,並且您將它們轉換回非Unicode! – 2012-03-09 05:55:07