2012-03-29 74 views
2

我有一個SQL Server 2005數據庫託管在共享主機環境。不幸的是,在過去的幾個月中,我一直在使用我的數據庫中現有文本附加的惡意腳本和html標籤來處理應用程序。Malscript注入SQL Server 2005數據庫

的文本被注入幾乎看起來像

"script src=http://somehostname/r.php ></script>" 

我使用IIS 7和啓用的requestFiltering。但是這次襲擊仍然非常嚴重。我怎樣才能防止我的數據庫從這種攻擊?

在此先感謝。

回答

0

是將數據提交到您的表應該剝奪任何應用程序這是一個很好的做法。當然,並非所有的應用程序都可以。

如果你不使用存儲過程,我建議你創建的INSERT和更新數據庫表中的觸發器,並檢查是否任何非法串試圖進入,如果他們這樣做,拒絕該行。 SQL有一些字符串操作關鍵字,如CHARINDEX,我個人會檢查常見的字符,如「\」「;」,「$」,「&」等

我也想嘗試並篩選出任何有已經進入你的表和刪除的行:

DELETE FROM Table 
WHERE Field LIKE '%<script>%' 

另外,如果你使用一個存儲過程,每個字段作爲參數傳遞,然後這些字符不會進入你的數據庫。

CREATE TRIGGER [dbo].[tr_CheckSQLInjection] 
ON [dbo].[Notes] 
FOR INSERT, UPDATE 
AS 

BEGIN 


BEGIN TRANSACTION T_CHECKCHARACTERS 

BEGIN TRY 

-- YOUR LOGIC TO STRIP OUT THE CHARACTERS HERE 

    COMMIT TRANSACTION T_CHECKCHARACTERS 

END TRY 

BEGIN CATCH 

    RAISERROR('UNABLE TO COMMIT THE TRANSACTION', 1, 1) 

    ROLLBACK TRANSACTION T_CHECKCHARACTERS 

END CATCH 

END 
+0

達倫, 我認爲它是一個偉大的想法在這方面bcoz我使用傳統的ASP和asp.net沒有存儲過程在一起。不幸的是,我不熟悉這個觸發器。你能把我連接到一個很好的例子嗎? – 2012-03-29 08:03:55

+0

觸發器:http://www.sqlteam.com/article/an-introduction-to-triggers-part-i 我編輯我的帖子,包括一個例子太多。 – 2012-03-29 08:06:42

+0

我也建議閱讀SQL注入,就像其他人提到的一樣。 – 2012-03-29 08:12:08

4

這通常是一個SQL注入攻擊。

這包括添加報價或SQL代碼爲有效的用戶輸入。

你確定你usings他們在你的查詢之前逃脫你DATAS的所有惡意字符?

看看http://en.wikipedia.org/wiki/SQL_injection

3

看來你沒有使用參數化的存儲過程,並從正在通過SQL注入攻擊的一些基本的預防。

請通過下面的鏈接瞭解更多: Protect From SQL Injection in ASP.NETPreventing SQL Injection Attacks

那麼對於傳統的ASP這個鏈接會值得你:SQL Injection in Classic ASP and Possible Solutions

+0

它是一個傳統的經典ASP應用程序,幾個asp.net頁面用於後臺任務。是的,asp應用程序沒有存儲過程,它有內聯sql命令用於從db中檢索數據。 – 2012-03-29 07:59:48

+0

@LibinTK:請看我的編輯,我給了一個新的鏈接。 – 2012-03-29 08:06:38

+0

感謝@Ashwini,讓我通過它去...... – 2012-03-29 08:11:13

相關問題