回答
存儲程序和/或準備的語句:
https://stackoverflow.com/questions/1973/what-is-the-best-way-to-avoid-sql-injection-attacks
Catching SQL Injection and other Malicious Web Requests
使用Access數據庫,你仍然可以做到這一點,但如果你已經擔心SQL注入,我認爲你無論如何都需要關閉Access。
下面是訪問技術的鏈接:
http://www.asp101.com/samples/storedqueries.asp
注意什麼典型的注射保護不是存儲過程本身,但事實上,它是參數化不是動態的。請記住,即使構建動態代碼的SP如果以特定方式使用參數來構建動態代碼,也可能容易受到注入攻擊。總的來說,我更喜歡SP,因爲它們構成了應用程序到達數據庫的接口層,所以應用程序甚至不允許首先執行任意代碼。
此外,如果您不使用命令和參數(例如,),存儲過程的執行點可能會受到攻擊。這仍然是脆弱的,因爲它是動態生成的,可以是注入目標:
Conn.Execute("EXEC usp_ImOnlySafeIfYouCallMeRight '" + param1 + "', '" + param2 + "'") ;
記住,你的數據庫需要保衛自己的邊界,如果各種登錄表格有權INSERT/UPDATE/DELETE
,在這些應用中的任何代碼(或妥協的應用程序)可能是一個潛在的問題。如果登錄只有執行存儲過程的權限,這就形成了一個漏斗,通過它你可以更容易地確保正確的行爲。 (類似於OO概念,其中對象負責其接口並且不暴露它們的所有內部工作)。
使用參數化查詢,您需要創建一個命令對象,爲其分配帶有名稱和值的參數if你這樣做,你就不需要擔心任何東西(指的當然SQL注入;))
http://prepared-statement.blogspot.com/2006/02/asp-prepared-statements.html
而且不信任的存儲過程,它們可以成爲攻擊向量太多,如果你不不使用預先準備的語句。
如果存儲過程是不是一種選擇 - 即使他們是 - 驗證所有輸入至少是徹底
切換到SQL Express是一個很好的選擇。它會使事情變得更加安全。儘管使用參數和存儲過程可以幫助很大。我還建議您仔細驗證輸入,以確保它們符合您的期望。
對於像數字這樣的值,提取數字以確認它確實只是一個數字是相當容易的。爲SQL退出所有特殊字符。這樣做可以防止嘗試的攻擊發揮作用。
「一個強大的方法來防止傳統的ASP應用程序的SQL注入」是無情地驗證所有輸入。期。
單獨的存儲過程和/或不同的數據庫系統並不一定具有良好的安全性。
MS最近推出了一個SQL注入檢測工具,用於查找查詢中使用的未驗證輸入。這是你應該尋找的。
的Microsoft Source Code Analyzer for SQL Injection tool可找到ASP代碼的SQL注入漏洞
嘿,因爲誰使用它開發好任何數據庫。
沒有更多,但沒有少。
如果您是一位優秀的開發人員,您可以使用文本文件作爲數據庫來構建電子商務網站。 是的,它不會像甲骨文驅動的網站一樣好,但它對於像家庭,定製珠寶製造這樣的小型企業來說可以做得很好。
如果您是一位優秀的開發人員,您將不會在ASP頁面上使用內聯SQL語句。 即使在Access中,您也可以選擇構建和使用查詢。
存儲數據驗證過程以及html編碼 - 是防止任何SQL注入攻擊的最佳方法。
這裏有幾個sqlinject腳本我很久以前做了一個簡單的版本和擴展版本:
function SQLInject(strWords)
dim badChars, newChars, i
badChars = array("select", "drop", ";", "--", "insert", "delete", "xp_")
newChars = strWords
for i = 0 to uBound(badChars)
newChars = replace(newChars, badChars(i), "")
next
newChars = newChars
newChars= replace(newChars, "'", "''")
newChars= replace(newChars, " ", "")
newChars= replace(newChars, "'", "|")
newChars= replace(newChars, "|", "''")
newChars= replace(newChars, "\""", "|")
newChars= replace(newChars, "|", "''")
SQLInject=newChars
end function
function SQLInject2(strWords)
dim badChars, newChars, tmpChars, regEx, i
badChars = array(_
"select(.*)(from|with|by){1}", "insert(.*)(into|values){1}", "update(.*)set", "delete(.*)(from|with){1}", _
"drop(.*)(from|aggre|role|assem|key|cert|cont|credential|data|endpoint|event|f ulltext|function|index|login|type|schema|procedure|que|remote|role|route|sign| stat|syno|table|trigger|user|view|xml){1}", _
"alter(.*)(application|assem|key|author|cert|credential|data|endpoint|fulltext |function|index|login|type|schema|procedure|que|remote|role|route|serv|table|u ser|view|xml){1}", _
"xp_", "sp_", "restore\s", "grant\s", "revoke\s", _
"dbcc", "dump", "use\s", "set\s", "truncate\s", "backup\s", _
"load\s", "save\s", "shutdown", "cast(.*)\(", "convert(.*)\(", "execute\s", _
"updatetext", "writetext", "reconfigure", _
"/\*", "\*/", ";", "\-\-", "\[", "\]", "char(.*)\(", "nchar(.*)\(")
newChars = strWords
for i = 0 to uBound(badChars)
Set regEx = New RegExp
regEx.Pattern = badChars(i)
regEx.IgnoreCase = True
regEx.Global = True
newChars = regEx.Replace(newChars, "")
Set regEx = nothing
next
newChars = replace(newChars, "'", "''")
SqlInject2 = newChars
end function
- 1. Php sql注入保護
- 2. CakePHP 3.0 Sql注入保護
- 3. typo3 sql注入保護
- 4. PHP SQL注入和保護?
- 5. ASP - SELECT子句中的SQL注入保護
- 6. 這足以保護再次SQL注入?
- 7. 保護免受惡意的sql注入
- 8. 保護ASP.NET中的SQL注入
- 9. 表達式中的SQL注入保護
- 10. PDO in Codeigniter - 保護vs SQL注入
- 11. SQL注入保護 - 何時何地
- 12. neo4j db注入保護
- 13. 何時擔心SQL注入保護
- 14. 用OpenCart保護SQL注入攻擊2.3.0.2
- 15. Kohana 2.3.4 ORM sql注入保護
- 16. sprintf()如何再次保護sql注入?
- 17. CSRF/SQL注入保護。還有什麼?
- 18. 從SQL注入保護應用程序
- 19. 保護XSLT注入
- 20. null列保護免受sql注入
- 21. PHP - 自動SQL注入保護?
- 22. Parameritized查詢C#SQL注入保護
- 23. PHP MySQL的注入保護
- 24. 傳統的ASP
- 25. 傳統的ASP的Response.Redirect到
- 26. ;在傳統的ASP
- 27. 如何在傳統的asp中預防SQL注入做準備語句?
- 28. 防止SQL注入ASP .NET
- 29. 經典ASP SQL注入
- 30. 在傳統的ASP
存儲過程並不是答案(即使他沒有使用Access),因爲你仍然可以使用SP編寫注入代碼(我已經看到它)。它是保護你的參數化查詢。 – Flory 2008-09-29 19:49:15