回答
存储程序和/或准备的语句:
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. 这足以保护再次SQL注入?
- 3. 保护免受恶意的sql注入
- 4. 表达式中的SQL注入保护
- 5. PDO in Codeigniter - 保护vs SQL注入
- 6. SQL注入保护 - 何时何地
- 7. 用OpenCart保护SQL注入攻击2.3.0.2
- 8. Kohana 2.3.4 ORM sql注入保护
- 9. 从SQL注入保护应用程序
- 10. null列保护免受sql注入
- 11. PHP - 自动SQL注入保护?
- 12. Parameritized查询C#SQL注入保护
- 13. 传统的ASP
- 14. 传统的ASP的Response.Redirect到
- 15. ;在传统的ASP
- 16. 如何在传统的asp中预防SQL注入做准备语句?
- 17. 在传统的ASP
- 18. 如何从SQL注入保护PHP中的SQL?
- 19. PHP SQL注入防护
- 20. 与传统的ASP
- 21. 传统的ASP QUERY
- 22. 日期验证在传统的ASP在传统的ASP
- 23. Lib保护用于java/jsp的SQL/javascript注入
- 24. PHP PDO:保护针对SQL注入的动态标识符
- 25. 针对动态查询的SQL注入保护
- 26. 在asp页面上的asp注入和sql注入有什么区别
- 27. Zend Framework的SQL注入防护
- 28. 使用传统ASP和ADO将Excel 2007导入到SQL 2000中
- 29. 如何保护Amazon SimpleDB免受SQL注入?
- 30. SQL注入保护 - 从字符串转换为int
存储过程并不是答案(即使他没有使用Access),因为你仍然可以使用SP编写注入代码(我已经看到它)。它是保护你的参数化查询。 – Flory 2008-09-29 19:49:15