SQL Server安全之加密術和SQL注入攻擊

SQL Server上內置了加密術用來保護各種類型的敏感數據。在很多時候,這個加密術對于你來說是完全透明的;當數據被存儲時候被加密,它們被使用的時候就會自動加密。在其他的情況下,你可以選擇數據是否要被加密。SQL Server可以加密下列這些組件:

·密碼

·存儲過程,視圖,觸發器,用戶自定義函數,默認值,和規則。

·在服務器和用戶之間傳輸的數據

密碼加密術

SQL Server自動將你分配給登陸和應用角色的密碼加密。盡管當你可以從主數據庫中直接察看系統表格而不需要密碼。你不能給對這種情況作出任何修改,事實上,你根本不能破壞它。

定義加密術

在有些時候,如果對對象進行加密是防止將一些信息分享給他人。例如,一個存儲進程可能包含所有者的商業信息,但是這個信息不能和讓其他的人看到,即使他們公開的系統表格並可以看到對象的定義。這就是爲什麽SQL Server允許你在創建一個對象的時候進行加密。爲了加密一個存儲進程,使用下面形式的CREAT PROCEDURE 語句:

CREATE PROCEDURE procedurename [;number]

[@parameter datatype

[VARYING][ = defaultvalue][OUTPUT]]

[, …]

[WITH RECOMPILE | ENCRYPTION | RECOMPILE, ENCRYPTION]

我們關心的僅僅是可選的WITH參數。你可以詳細說明ARECOMPILE或者ENCRYPTION,或者你可以同時說明它們。ENCRYPTION關鍵字保護SQL Server它不被公開在進程中。結果,如果ENCRYPTION在激活的時候系統存儲進程sp_helptext就會被忽視,這個存儲進程將被存儲在用戶創建進程的文本中。如果你不想要加密,你可以使用ALTER PROCEDURE,忽略WITH ENCRYPTION子句來重新創建一個進程。

爲了能夠使用加密術。用戶和服務器都應該使用TCP/IP NetworkLibraries用來連接。運行適當的Network Utility和檢查Force protocol encryption,看下表,用戶和服務器之間的連接將不會被加密。

加密也不能完全自由。當連接確定後,要繼續其他的構造,並且用戶和服務器必須運行代碼來解釋加密和解釋的包裹。這裏將需要一些開銷並且當在編譯碼的時候會使進程慢下來。如果網絡包裹在你控制範圍之外,使用這種做法是非常好的。

加密術中缺少什麽?

你可以注意到在這個列表中缺少一些被加密的東西:你表格中的數據。在你存儲數據之前,SQL Server不會提供任何內置的工具來加密你的數據。如果你需要保護存儲在SQL Server上的數據,我們給你兩條建議:第一,你可以利用GRANT 和DENY關鍵字來控制你想哪個用戶可以在SQL Server中讀取的數據。

第二.如果你真的想對數據加密,不要設法加密碼。你可以利用被測試過的商業産品的算法。

SQL 注入攻擊

SQL 注入攻擊是一個常規性的攻擊,它可以允許一些不法用戶檢索你的數據,改變服務器的設置,或者在你不小心的時候黑掉你的服務器。SQL 注入攻擊不是SQL Server問題,而是不適當的程序。如果你想要運行這些程序的話,你必須明白這冒著一定的風險。

測點定位弱點

SQL 注入的脆弱點發生在程序開發員構造一個WHERE 子句伴隨著用戶的輸入的時候。比如,一個簡單的ASP程序允許用戶輸入一個顧客的ID然後檢索公司的全部人員的名字,如果顧客ID如果作爲ASP頁面的請求串的一部分返回,那麽開發員可以編寫下面的代碼獲得數據:

strConn = "Provider=SQLOLEDB;Data Source=(local);" & _

"Database=Northwind;Integrated Security=SSPI"

Set cnn = Server.CreateObject("ADODB.Connection")

cnn.Open strConn

strQuery = "SELECT ContactName FROM Customers " & _

“WHERE CustomerID = '" & Request.Form("CustID") & "'"

Set rstResults = cnn.Execute(strQuery)

Response.Write(rstResults.Fields("ContactName").Value)

現在你知道什麽地方有問題了吧?如果用戶知道一個用戶的ID,他可以通過檢索來獲得全部的相應的名字。現在明白了?

獲得額外的數據

當然,對于一個攻擊程序,盡管它不知道任何顧客的ID,甚至不用去猜,它也可以獲得數據。爲了完成這個工作,它將下面的文本輸入到應用程序調用顧客ID的textbox中:

customer ID:

'UNION ALL SELECT ContactName FROM Customers

WHERE CustomerID <>'

如果你輸入了這個代碼,你將會看到返回一個詢問語句:

SELECT ContactName FROM Customers

WHERE CustomerID = ''

UNION ALL SELECT ContactName FROM Customers

WHERE CustomerID <>''

通過獲得空和非空顧客的ID並集,這個查詢語句會返回數據庫中所有的相關姓名。事實上,這個UNION技術可以被用來獲得你數據庫中大多數信息,看看這個CustomerID的值:

'UNION ALL SELECT FirstName ' ' LastName FROM

Employees WHERE LastName <>'

它將SQL語句變成:

SELECT ContactName FROM Customers

WHERE CustomerID = ''

UNION ALL SELECT FirstName ' ' LastName FROM

Employees WHERE LastName <>''

看,那就是攻擊程序從你的數據庫獲得的第一個雇員的名字。

更多的攻擊程序

如果SQL注入僅僅只有數據暴光這個弱點就已經夠糟糕的了,但是,實際上一個良好的攻擊程序可以通過這個弱點獲取你數據庫中所有的資料。看下面這個例子:

';DROP TABLE Customers;--

SQL語句變成:

SELECT ContactName FROM Customers

WHERE CustomerID = ''

; DROP TABLE Customers;-- '

這個分號使語句和SQL Server隔離,所以,這裏實際上是兩個語句。第一個語句不存在的名字,第二個則撤消的整個Customers表。兩個—SQL Server注釋符,它可以使子句不發生語法錯誤。

使用這個技術的變異,一個攻擊程序可以在任何SQL語句或者存儲過程上運行。通過使用xp_cmdshell擴展存儲過程,一個攻擊程序同樣可以在操作系統命令下運行,顯然,這是一個嚴重的漏洞。

保護自己的數據庫

現在,你知道如何防範SQL注入攻擊了嗎?首先,你不能在用戶輸入中構造WHERE子句,你應該利用參數來使用存儲進程。在最初的ASP頁面下,重新寫的部分將和剛才我們在表中所看到的東西相似。即使你認爲在你的應用程序中沒有脆弱點,你應該遵守最小特權原則。使用我們建議的其他安全技術允許你的用戶僅僅訪問他們能夠訪問的。在你沒有發現你數據庫脆弱點的時候,只有這樣,不會使你的數據庫崩潰。

最後的建議

這就是全部的SQL Server安全系列。也許你現在不是一個全面的專家,但是你已經了解了很多反面。下一步就是你要保護你SQL Server數據,記住你在這裏所學到的知識,並利用到你的數據庫中保證你的數據不被那些黑客攻擊。

Sql server加密技術和SQL注入攻擊
SQL Server上的加密術   SQL Server上內置了加密術用來保護各種類型的敏感數據。在很多時候,這個加密術對于你來說是完全透明的;當數據被存儲時候被加密,它們被使用的時候就會自動加密。在其他的情況下,你可以選...查看完整版>>Sql server加密技術和SQL注入攻擊
 
SQL攻擊:防禦和檢查SQL注入的手段-黑客軟件
雖然前面有許多文章討論了SQL注入,但今天所討論的內容也許可幫助你檢查自己的服務器,並采取相應防範措施。知彼知己,方可取勝。首先要清楚SQL注入攻擊有哪些種類。 觀察近來的一些安全事件及其後果,安全專家們已經...查看完整版>>SQL攻擊:防禦和檢查SQL注入的手段-黑客軟件
 
SQL注入技術和跨站腳本攻擊的檢測-黑客軟件
在這兩年中,安全專家應該對網絡應用層的攻擊更加重視。因爲無論你有多強壯的防火牆規則設置或者非常勤于補漏的修補機制,如果你的網絡應用程序開發者沒有遵循安全代碼進行開發,攻擊者將通過80端口進入你的系統。廣...查看完整版>>SQL注入技術和跨站腳本攻擊的檢測-黑客軟件
 
新手入門:防範SQL注入攻擊的新辦法
  近段時間由于修改一個ASP程序(有SQL注入漏洞),在網上找了很多相關的一些防範辦法,都不近人意,所以我將現在網上的一些方法綜合改良了一下,寫出這個ASP函數,供大家參考。以下是引用片段:Function SafeReques...查看完整版>>新手入門:防範SQL注入攻擊的新辦法
 
SQL數據庫注入攻擊 好慘
  24日下午,網站突然遭遇sql數據庫注入攻擊,全部數據信息,都被攻擊者在數據後面,添加了很多亂七八的HTML代碼,影響的數據有數萬條。暈完。  以爲只是一次性攻擊,仔細查看了數據庫,發現那些注入的代碼,還是...查看完整版>>SQL數據庫注入攻擊 好慘
 
輕松三步走!防止SQL數據庫注入攻擊
  風靡全球的SQL注入攻擊,相信給很多人留下了深刻的印象,但是在這場攻擊過後,筆者查閱了網上目前修補SQL注入的方法,發現裏面都是一些“雜亂無章”的修補代碼,對于不會編程的站長們來說,簡直是“鴨子看閃電等...查看完整版>>輕松三步走!防止SQL數據庫注入攻擊
 
SQL注入技術和跨站腳本攻擊的檢測
  1、概述    在這兩年中,安全專家應該對網絡應用層的攻擊更加重視。因爲無論你有多強壯的防火牆規則設置或者非常勤于補漏的修補機制,如果你的網絡應用程序開發者沒有遵循安全代碼進行開發,攻擊者將通過80端...查看完整版>>SQL注入技術和跨站腳本攻擊的檢測
 
收錄二:SQL Server應用程序中的高級SQL注入
這份文檔是詳細討論SQL注入技術,它適應于比較流行的IIS+ASP+SQLSERVER平台。它討論了哪些SQL語句能通過各種各樣的方法注入到應用程序中,並且記錄與攻擊相關的數據確認和數據庫鎖定。這份文檔的預期讀者爲與數據庫通...查看完整版>>收錄二:SQL Server應用程序中的高級SQL注入
 
初級教程之SQL Injection(SQL注入攻擊)
因爲目前SQL注入是非常熱門而且技術門檻較低的攻擊手段,並且非常實用,輕則可以拿到網站的一些帳號,比如拿到某個電影網站的黃金會員的帳號;重則利用其網站樓多入侵整個服務器等等。 這裏打算作爲一個專題講解SQL及...查看完整版>>初級教程之SQL Injection(SQL注入攻擊)
 
 
回到王朝網路移動版首頁