为了账号安全,请及时绑定邮箱和手机立即绑定

经典ASP SQL注入保护

/ 猿问

经典ASP SQL注入保护

牧羊人nacy 2019-10-11 10:50:44

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

仅供参考,我将其与访问数据库一起使用。(我没有写应用程序)


查看完整描述

3 回答

?
慕容森

存储过程和/或准备好的语句:


https://stackoverflow.com/questions/1973/what-is-the-best-way-to-avoid-sql-injection-attacks


是否可以通过转义单引号和用单引号引起来的用户输入来防止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概念,其中对象负责其接口并且不公开其所有内部工作。)


查看完整回答
反对 回复 2019-10-11
?
LEATH

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


查看完整回答
反对 回复 2019-10-11
?
慕仰1329654

“保护经典ASP应用程序免受SQL注入的一种有效方法”是无情地验证所有输入。期。


单独的存储过程和/或不同的数据库系统不一定等于良好的安全性。


MS最近推出了一种SQL注入检查工具,该工具可以查找查询中使用的未经验证的输入。那是您应该寻找的。



查看完整回答
反对 回复 2019-10-11

添加回答

回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信