程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> SqlServer數據庫 >> 關於SqlServer >> 多樣化的Sql-Server應用程序注入(10)

多樣化的Sql-Server應用程序注入(10)

編輯:關於SqlServer

[輸入驗證]

輸入驗證是一個很復雜的問題。一般在一個開發項目中它很少被注意,因為過度的驗證往往使一個程序的某部分被打斷,所以輸入驗證是個難題。輸入驗證往往不加到程序的功能裡,因而在工期將至而趕程序時不會被人注意。

下面是關於驗證的簡單的討論附示例代碼,這個示例代碼當然不能直接用在程序裡,但可以很好的說明不同的策略。

各種數據驗證的途徑可以分類為以下幾種:

1)整理數據使之變得有效
2)拒絕已知的非法輸入
3)只接受已知的合法的輸入

方法1有很多概念上的問題;首先,開發者沒有必要知道非法數據由什麼組成,因為新形式的非法數據隨時都可能產生。第二,改變數據會改變它的長度,這樣會導致前面提到的問題。最後,還有需要對系統已有數據的重用的話有二次注入的問題.

解決方案2也會遇到和1的一些相似的問題,了解非法數據會過時,因為新的攻擊技術也在發展。

解決方案3可能是三種方法中最好的,但是比較難於執行。

從安全角度來考慮可能最好多解決方法是把解決方案2和3結合起來只允許合法的輸入,然後再尋找非法字符。

一個必須結合這兩種途徑的例子是帶有連字符的名字的問題:

Question Bassington-Bassington

我們必須在合法輸入裡允許連字符號,但是也要明白字符串'--'在SQL-Server裡意味著什麼。

當數據整理結合了非法字符驗證時另一個問題就會發生。假設我們應用“非法字符探測器”來探測'--','select'和'union'”後使用“數據整理過濾器”刪除單引號,攻擊者就可以指定這樣的輸入:

uni'on sel'ect @@version-'-

因為單引號被過濾器刪除了,攻擊者可以把單引號散布於它的已知的非法字符串裡來躲避檢查。

下面是一些驗證的代碼:

方法1-躲避單引號

function escape( input )
input = replace(input, "'", "''")
escape = input
end function

方法2-抵制已知的非法輸入

function validate_string( input )
know_bad = array( "select", "insert", "update", "delete", "drop", "--", "'")
validate_string = true
for i = lbound( know_bad ) to ubound( known_bad )
if( instr( 1, input, known_bad(i), vbtextcompare) <> 0 )
validate_string = false
exit function
end if
next
end function

方法3-只允許合法輸入

function validatepassWord( input )
good_passWord_chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
validatepassWord = true
for i = 1 to len( input )
c = mid( input, i, 1 )
if ( instr( good_passWord_chars, c ) = 0 ) then
validatepassWord = false
exit function
end if
next
end function


[SQL Server 防御]

最重要的一點是必須防范SQLServer,’out of the box’並不安全。這裡有一當創建SQL-Server構架要做的事情的簡明清單:

1.決定連接到服務器的方法
a.使用’Network utility’檢驗你使用的網絡庫是可用的
2.檢查哪些帳號存在
a.為程序創建低權限帳號
b.刪除不需要的帳號
c.確保所有的帳號都有一個健壯的密碼;在一個正常運行一個密碼審計腳本(比如附錄裡提供了一個)。
3.檢查哪些對象存在
a.許多擴展存儲可以安全的刪除,如果這些已經做了考慮刪除一些包含擴展存儲的dll
b.刪除所有的數據庫實例-比如'northwind'和'pubs'數據庫
4.檢查哪些帳號可以訪問對象
a.應用程序用戶所使用的訪問數據庫的帳號應該只擁有對所需要的對象的最小訪問權限
5.檢查服務器的補丁狀況
a.有一些針對SQL-Server的緩沖區溢出[3],[4]和格式字符串[5]攻擊(大部分是作者自己發現的)和一些其他的安全補丁,可能還有更多的漏洞存在
6.檢驗日志記錄些什麼,和日志可以做些什麼。

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