什么是一个坚强的方式来保护针对sql注对于一个经典的asp程序?

FYI我使用一个access数据库。(我没有写的应用程序)

有帮助吗?

解决方案

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

https://stackoverflow.com/questions / 1973 /什么-是最最好的方式对避免-SQL注入攻击

我能保护吗?通过使用单引号转义单引号和周围用户输入来反对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

"强烈的方式来保护针对sql注对于一个经典的asp应用程序"是无情地验证所有输入。期。

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

MS最近推出了一个SQL注射检测工具,来为未经验证的输入,用于查询。这就是你应该寻找。

这里就是链接:Microsoft源码分析SQL注射工具可以找到SQL注中的漏洞ASP码

使用参数化查询,您需要创建一个命令对象,为其分配名称和值的参数,如果这样做,您不需要担心任何其他事情(当然请参考sql注入;))

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

如果您不使用预准备语句,那么它们也不会信任存储过程,它们也会成为攻击媒介。

如果存储过程不是一个选项 - 即使它们是 - 彻底验证所有输入

嘿,任何数据库都与使用它的开发人员一样好。

没有更多,但没有更少。

如果您是优秀的开发人员,您可以使用文本文件作为数据库来构建电子商务网站。 是的,它不会像甲骨文驱动的网站那么好,但对于像家庭,定制珠宝制造这样的小型企业来说,它会做得很好。

如果您是优秀的开发人员,则不会在ASP页面上使用内联SQL语句。 即使在Access中,您也可以选择构建和使用查询..

使用数据验证存储过程以及html编码 - 是防止任何SQL注入攻击的最佳方法。

用于SQL注入工具的Microsoft源代码分析器可用于查找SQL注入漏洞ASP代码

至少切换到SQL Express是一个很好的选择。它会使事情变得更加安全。尽管使用参数和存储过程可以提供很大帮助。我还建议您仔细验证输入,以确保它们符合您的期望。

对于数字这样的值,提取数字以确认它确实只是一个数字是相当容易的。转义SQL的所有特殊字符。这样做可以防止尝试的攻击工作。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top