程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> SqlServer數據庫 >> 關於SqlServer >> 如何保證SQL Server免遭SQL注入攻擊

如何保證SQL Server免遭SQL注入攻擊

編輯:關於SqlServer

SQL注入攻擊可能是黑客攻擊面向互聯網的SQL Server數據庫最常用的方式。任何使用動態SQL、允許未經檢驗的用戶輸入提交到數據庫的應用程序都面臨SQL注入攻擊的風險,無論你的網絡有多安全,或者你安裝了多少防火牆。最近有一項關於Web黑客攻擊的報告顯示,SQL注入攻擊呈上升趨勢,不僅僅導致數據盜竊和數據丟失,而且在最近一連串的自動注入攻擊中,數據庫被破壞,向用戶提供惡意Java腳本。這種滲透導致Web服務器令客戶端電腦感染上其它的病毒。報告對於已經遭到攻擊的網站數量統計不一,不過,哪怕是最低的數字都上萬。在感染的高峰期,甚至聯合國的網站也無法幸免。

你可能會認為SQL Server平台既然這麼不安全,不如考慮更換平台。但事實上,所有的數據庫平台都受到這種攻擊的困擾。由於在主機環境中更多部署的是SQL Server,所以,針對SQL Server的攻擊也就相應更為普遍。開發人員進行網頁開發工作,他們不知道如何防范這樣的攻擊。由於這種攻擊的成功率很高,所以,在惡意軟件的社區內頗為流行。

SQL注入攻擊是如何工作的?

容易遭受SQL注入攻擊的Web應用程序具有以下特點:

1.你的網站使用動態SQL。這不是指應用程序動態生成select或者insert語句。它是指任何代碼是動態生成的,包括應用程序在執行語句之前,動態生成一個存儲過程。

2.當從客戶端應用程序取值的時候,這些值沒有經過驗證——也可能沒有對語法或者轉義符進行驗證。

SQL注入攻擊是這樣進行的:攻擊者修改現有命令行,通過在字符串值內插入一個單引號,或者在數字後面添加分號,在轉義符後面寫入SQL語句。命令行看上去類似這樣:

exec sel_CustomerData @CustomerId=47663; truncate TABLE Customer

這樣會執行sel_CustomerData過程,然後運行truncate TABLE命令,刪除Customer數據表的內容。如果有Foreign Key約束這個數據表,數據庫將會返回錯誤,向黑客提供受約束的數據表名稱。一名聰明的黑客可以利用這個技巧,查找到數據庫裡面每一個表的名稱。然後,黑客能夠將數據插入你的數據庫,或者從你的表中選擇數據(取決於數據庫給了應用程序什麼樣的權限)。當黑客獲取了數據表中的數據,就可以使用xp_sendmail或sp_send_dbmail向他們自己發送電子郵件。即使你已經禁用這些過程,黑客可以輕易啟用這些過程,或者使用sp_OA過程添加他們自己的過程。

如何確保SQL Server數據的安全,避免SQL注入?

有多種辦法可以保護你的數據庫,避免這樣的攻擊。

首先,我們需要采用數據庫安全的最佳實踐方法加固數據庫安全。這包括將數據庫的操作許可設置為最低級別(setting up the database security with the lowest set of permissions possible.)。同時,應用程序不要直接訪問數據表。所有對數據表的訪問應該通過存儲過程進行,而且那些存儲過程不應該包括任何動態SQL。

避免對表的直接訪問,你可以很大地減少受攻擊的層面。但是,這並不是唯一必須做的事情。存儲過程也存在受到攻擊的可能性。雖然對存儲過程進行攻擊需要花費更多的時間,但是,仍然有可能利用你的存儲過程對數據庫進行破壞。存儲過程就是用來向數據庫中插入、更新和刪除數據。一個聰明的黑客可以利用你自己的存儲過程攻擊你。

這是需要應用開發人員和你共同工作的方面,以確保被執行的代碼(the code being executed against the database)是安全的。如果不確保應用層的安全,防范SQL注入攻擊,其他的工作都將是徒勞的。數據只要進入數據庫,基本上不可能在數據庫內進行驗證。這需要在應用層對數據進行驗證。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved