2011-09-02 64 views
3

Web開發和接管某些代碼的新手。他們有一個功能,以防止SQL注入,SQL Server數據庫SQL Server注入

function safe(val, maxsize) 
    dim i, 
    terms = array(
     "cast", 
     "select", 
     "varchar", 
     "declare", 
     "drop", 
     ";", 
     "--", 
     "insert", 
     "delete", 
     "xp_" 
    ) 
    val = left(val,maxsize) 
    val = trim(val) 
    for i = 0 to ubound(terms) 
     val = replace(val, terms(i), "e_" & val & "_e", vbTextCompare) 
    next 
    val = replace(val, "'", "''") 
    makesafe = val 
end function 

猶豫要觸摸這個,但這是否缺少什麼?似乎他們偶爾砍死

+8

如果他們被黑客攻擊,他們應該正確處理注入 - 使用帶有正確數據類型的參數化語句,驗證輸入並且不要盲目地基於用戶(甚至是應用程序)提交的字符串生成SQL語句。這個「安全」功能對我來說就像是一張虛假的安全毯。 –

+2

使用**參數化查詢**而不是將您的SQL語句連接在一起是您**唯一可行的方法。忘記「消毒」你的輸入 - 你會永遠忘記一些東西 - 只是使用參數化查詢並用它來完成...... –

+0

'exec'呢? – tugberk

回答

4

下面的文章應該有所幫助:

http://tugberkugurlu.com/archive/sql-injection-vs-lethal-injection-protection-against-sql-injection

這不是好主意,這條路走下來string.Replace

+0

絕對+1 - 唯一有用的解決方案是**參數化查詢**,因爲本文很好地顯示 –

+1

@marc_s完全同意。此外,EntityFramework或Linq to SQL也會有所幫助。 – tugberk

+0

這看起來像傳統ASP中的VBScript,所以它可能會涉及更多的移動到EF或Linq2SQL。 –

2

我就徹底放棄該功能,並開始使用參數像亞倫在他的評論中提到的陳述。如果您之前沒有這樣做,有關如何這樣做的各種articles。在我鏈接到的文章中,請看步驟2.

2

我不會依賴這樣的函數來防止sql注入攻擊。參數化查詢是必須的。幾乎可以肯定一些注射文本,你會錯過使用你列出的方法的方法。