发新话题
打印

[讨论]关于如何防止SQL Injection

[讨论]关于如何防止SQL Injection

议题提交:kuba8
信息来源:邪恶八进制信息安全团队(www.eviloctal.com

现在的网站SQL注入是一个比较常用的入侵方式,但是我对防止sql注入确知道的很少,也去查过一些资料,得不到很详细的解释,希望在邪恶可以找到答案

问题1:经常看到一些安全网站说到某种asp程序中的某个asp文件有注入漏洞,但是在修补这一块,都是只用了几句话一带而过,比方说,在这个asp文件过滤掉符号,数字什么的,但是怎么过滤呢?哪位朋友可以给出一些实例对比来让我们看看学习一下嘛

问题2:网站后台'or''='登陆漏洞,这个我以前看过一个动画,动画上说把文件替换掉,但是我对方了原文件和替换的文件,没发现有什么不一样的地方,但是替换后真的不能通过'or''='登陆了,有可能我知道的太少,也希望有朋友可以提供出一些实例供我们分析学习

感谢~

TOP

告你一方法,ASP防sql注入只要学一个函数
Replace
用法可以自己查MSDN

TOP

防注入就是要过滤非法字符
id=request("id") 这样就没过滤
你可以在后面加上
if isnumeric(id)=false then response.redirect "/error.htm"
这个意思就是如果ID不是数字型,就转到出错页面.

TOP

引用:
这里是引用第[3 楼]angel2006-04-10 10:26发表的:
防注入就是要过滤非法字符
id=request("id") 这样就没过滤
你可以在后面加上
if isnumeric(id)=false then response.redirect "/error.htm"
这个意思就是如果ID不是数字型,就转到出错页面.
不敢保证MSSQL发展的会有多快,VIF自卖自夸:

附件

1.PNG (17 KB)

2006-4-11 08:38

1.PNG

论坛地址: http://www.ssk2.cn & www.iisuser.com

TOP

--------------------------------------------------
现在有2个不错的软件

  SQL通用防注入程序            下载地址:http://www.sz1001.net/soft/6629.htm
  SQL/ACCSEE 防注入系统共用版    下载地址:http://www.asp163.net/Soft/PE_Plus/116.html

--------------------------------------------------
装B会装成傻子的,小心点

TOP

放在需要的文件里

========================================
<%
on error resume next
dim sql_injdata
SQL_injdata = "&#39;|;|and|exec|insert|select|delete|update|count|*|%|chr|mid|master|truncate|char|declare"
SQL_inj = split(SQL_Injdata,"|")
If Request.Form<>"" Then
For Each Sql_Post In Request.Form
For SQL_Data=0 To Ubound(SQL_inj)
if instr(Request.Form(Sql_Post),Sql_Inj(Sql_DATA))>0 Then
Response.Write "<Script Language=JavaScript>alert(&#39;搜索数据字段不支持,请返回重试!&#39;);history.back(-1)</Script>"
Response.end
end if
next
next
end if

If Request.QueryString<>"" Then
For Each SQL_Get In Request.QueryString
For SQL_Data=0 To Ubound(SQL_inj)
if instr(Request.QueryString(SQL_Get),Sql_Inj(Sql_DATA))>0 Then
Response.Write "<Script Language=JavaScript>alert(&#39;搜索数据字段不支持,请返回重试!&#39;);history.back(-1)</Script>"
Response.end
end if
next
Next
End If
%>
=================================================

基本上可以防了,不够按照上面的模式再加!
女施主清留步~!

TOP

那么在aspx的文件里是不是也是这样来防止呢,aspx的防注我可还没看到什么通用的防注程程序

TOP

aspx的注射方式和asp是换汤不换药的,所以防止方式也基本差不多.

TOP

其实可以在你的Conn.asp里面加那些网络上的 通用防止注射的程序,
那些东西其实就是把非数字的request("id")表单id过滤掉了,或者可以像楼上说的
用Response.函数把注射者跳转到错误页面.或者就是可以用 Replace函数把要过滤的字符过滤掉
就ok了...

TOP

其实很多牛人已经送给 菜鸟好多好用的小程序了,通用防注入程序有很多种  找一个合适自己网站的,如果有些小的错误自己再拿来改下  例如有的顾虑不全  有的记录日志到数据库  ,你可以补全过滤字符嘛
SQL通用防注入程序就不错  你可以试下  只要在数据库连接文件(conn.asp) 里加上一句<!--#indadeFile="wrsky_sql.asp"-->  这样就可以整站过滤了
还有就是可以让即使有漏洞的页面也不去给攻击者暴错就好了  可以在IIS里设置
也可以自己在你的ASP语句中(一般是在最开头的地方),加上一句
On Error Resume Next  一个简单的容错语句,当ASP语句执行时发生错误,就跳过错误,继续向下执行,而且不会返回错误信息。  象我们这种菜鸟级别的站长都是这么去做的  如果楼主不是大门户的站长  注意这几点应该就没事儿了  大多数菜鸟都不愿意花很长的时间去搞一个小站的  呵呵
www.tsnews.net唐山在线 www.qq-qqzone.cnQQ空间

TOP

至于&#39;or &#39;&#39;=&#39;  进后台嘛~~~~首先你得知道为什么添这个能进去  其实就是那些数据库认为
“空”=“空”是成立的条件,所以就直接进后台了 不过我感觉有时候&#39; or &#39;1&#39;=&#39;1 会比 &#39;or &#39;&#39;=&#39; 更好用
这里说下Repalce语法规则:
Replace(变量名称,"要过滤的字符","要替换的字符")
说明,“要替换的字符”那里,如果留空,就是把要过滤的字符直接删除。
例子:
Replace(Pwd,"’or","")
过滤Pwd变量中的or字符。
由于Replace函数,一次只能对一组字符进行转义,所以讲讲Replace的嵌套:
Replace(Replace(Pwd,"or",""),"’","")  
如果你还想过滤and,分号,--什么的,请看下面(完全过滤了在SQL注入中最关键的5个字符串。)
Replace(Replace(Replace(Replace(Replace(变量名称,"’",""),"or",""),"and",""),"--",""),";","")
www.tsnews.net唐山在线 www.qq-qqzone.cnQQ空间

TOP

发新话题