当前位置:  开发笔记 > 数据库 > 正文

经典的ASP SQL注入保护

如何解决《经典的ASPSQL注入保护》经验,为你挑选了2个好方法。

什么是防止经典asp应用程序的SQL注入的强大方法?

仅供参考我正在使用访问数据库.(我没有写应用程序)



1> Cade Roux..:

存储过程和/或准备好的声明:

/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概念,其中对象负责其接口,并且不公开其所有内部工作.)



2> Plippie..:

以下是我很久以前制作的几个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

推荐阅读
贾志军
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有