经典ASP SQL注入防护(Classic ASP SQL Injection Protection

2019-07-20 05:52发布

什么是防止SQL注入了传统的ASP应用程序强大的方法吗?

仅供参考我使用它访问数据库。 (我没有写的应用程序)

Answer 1:

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

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

我可以防止SQL注入通过转义单引号和周围用户输入用单引号?

捕获SQL注入及其他恶意的Web请求

随着Access数据库,你仍然可以做到这一点,但如果你已经担心SQL注入,我认为你需要下车访问反正。

下面是在Access技术的链接:

http://www.asp101.com/samples/storedqueries.asp

需要注意的是什么通常从注射保护不是存储过程本身,但事实上,它是参数化不是动态的。 请记住,如果他们使用某些方法,建立动态代码参数即使是构建动态代码的SP容易受到注射。 总体而言,我更喜欢的SP,因为它们形成的界面层,应用到数据库中,这样的应用程序甚至不能在第一时间执行任意代码。

此外,在存储过程的执行点可以是脆弱的,如果你不使用命令和参数,例如这仍然是脆弱的,因为它是动态生成的,可以是注入目标:

Conn.Execute("EXEC usp_ImOnlySafeIfYouCallMeRight '" + param1 + "', '" + param2 + "'") ;

记住,你的数据库需要保卫自己的边界,如果各种登录有权INSERT/UPDATE/DELETE的表,在这些应用程序(或应用程序受损)的任何代码可以是一个潜在的问题。 如果登录唯一有权利执行存储过程,这形成了一个漏斗,通过它可以更容易地确保正确的行为。 (以面向对象的概念,而对象负责它们的接口,不暴露他们所有的内部运作类似。)



Answer 2:

这里有几个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


Answer 3:

“来防止SQL注入了传统的ASP应用程序强大的方式”是无情地验证所有输入。 期。

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

MS最近提出了SQL注入检测工具,查找了在查询中使用未经验证的输入。 那是你应该寻找。

这里的链接: 微软的源代码分析器SQL注入工具可找到ASP代码的SQL注入漏洞



Answer 4:

使用参数化querys,您需要创建一个命令对象,为其分配一个名称和一个值的参数,如果你这样做,你就不需要担心任何东西(指的当然SQL注入;))

http://prepared-statement.blogspot.com/2006/02/asp-prepared-statements.html

和不信任的存储过程,它们可以成为攻击向量太多,如果你不使用准备好的语句。



Answer 5:

如果存储过程是不是一种选择-即使他们是- 彻底验证所有输入



Answer 6:

嘿,任何数据库一样好,谁使用它开发。

仅此而已,但也不少。

如果你是优秀的开发人员可以使用文本文件作为数据库建立的电子商务网站。 是的,它不会像甲骨文驱动的网站一样好,但它会做就好了像家庭为基础的,定制珠宝制造业的小企业。

如果你是优秀的开发人员,你不会使用在你的ASP页面内联SQL语句。 即使在访问您已选择建立和使用查询..

存储特效与数据验证,使用HTML编码一起 - 是为了防止任何SQL注入攻击的最佳方法。



Answer 7:

在微软的源代码分析器SQL注入工具可找到ASP代码的SQL注入漏洞



Answer 8:

切换到SQL Express起码是一个很好的选择。 这将使事情变得更安全。 即使使用参数和存储过程可以极大地帮助。 我也建议你仔细验证的投入,以确保它们符合你期待什么。

对于相同的数字值是相当容易提取号码,验证它确实只是一个数字。 逃命SQL所有特殊字符。 这样做可以防止攻击企图从工作。



文章来源: Classic ASP SQL Injection Protection