什么是防止经典asp应用程序的SQL注入的强大方法?
仅供参考我正在使用访问数据库.(我没有写应用程序)
存储过程和/或准备好的声明:
/sf/ask/17360801/
我可以通过使用单引号转义单引号和周围用户输入来防止SQL注入吗?
捕获SQL注入和其他恶意Web请求
使用Access DB,您仍然可以执行此操作,但如果您已经担心SQL注入,我认为您无论如何都需要使用Access.
这是Access中技术的链接:
http://www.asp101.com/samples/storedqueries.asp
请注意,通常保护注入的不是存储过程本身,而是它是参数化而非动态的事实.请记住,即使构建动态代码的SP如果以某种方式使用参数来构建动态代码,也很容易被注入.总的来说,我更喜欢SP,因为它们形成了应用程序到达数据库的接口层,因此甚至不允许应用程序首先执行任意代码.
此外,如果您不使用命令和参数,则存储过程的执行点可能容易受到攻击,例如,由于它是动态构建的并且可以是注入目标,因此仍然容易受到攻击:
Conn.Execute("EXEC usp_ImOnlySafeIfYouCallMeRight '" + param1 + "', '" + param2 + "'") ;
请记住,您的数据库需要保护自己的边界,如果各种登录对INSERT/UPDATE/DELETE
表中具有权限,那些应用程序(或受损应用程序)中的任何代码都可能成为潜在问题.如果登录只有执行存储过程的权限,则会形成一个漏斗,您可以通过该漏斗更轻松地确保正确的行为.(类似于OO概念,其中对象负责其接口,并且不公开其所有内部工作.)
以下是我很久以前制作的几个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