sql注入防范方法

vvggghb

vvggghb

2016-01-29 17:07

sql注入防范方法,你都知道有SQL注入了,就在传值那处理好别人提交的数据,把特殊符号过滤掉 我找了一些函数你看看1、 SQL注入漏洞可谓是“千 里之堤,溃于蚁穴”,这种漏洞在网上极为普遍,通常是由于程序员对注入不了解,或者程序过 ...

你都知道有SQL注入了,就在传值那处理好别人提交的数据,把特殊符号过滤掉 我找了一些函数你看看

1、 SQL注入漏洞可谓是“千里之堤,溃于蚁穴”,这种漏洞在网上极为普遍,通常是由于程序员对注入不了解,或者程序过滤不严格,或者某个参数忘记检查导致。在这里,我给大家一个函数,代替ASP中的Request函数,可以对一切的SQL注入Say NO,函数如下:

Function SafeRequest(ParaName,ParaType)
 '--- 传入参数 ---
 'ParaName:参数名称-字符型
 'ParaType:参数类型-数字型(1表示以上参数是数字,0表示以上参数为字符)

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/asp/)

 Dim ParaValue
 ParaValue=Request(ParaName)
 If ParaType=1 then
  If not isNumeric(ParaValue) then
   Response.write "参数" & ParaName & "必须为数字型!"
   Response.end
  End if
 Else
  ParaValue=replace(ParaValue,"'","''")
 End if
 SafeRequest=ParaValue
End function

2、几年时间,当年的伙计已经成为一个国内知名黑客组织的站长,在他的程序有也有些放黑的代码,贴出来给朋友们提提供个方便

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/asp/)

<%
rem 检查sql字符串中是否有单引号,有则进行转化
function CheckStr(str)
dim tstr,l,i,ch
l=len(str)
for i=1 to l
ch=mid(str,i,1)
if ch="'" then
tstr=tstr+"'"
end if
tstr=tstr+ch
next
CheckStr=tstr
end function
%

<%
''--------定义部份------------------
Dim Fy_Post,Fy_Get,Fy_In,Fy_Inf,Fy_Xh,Fy_db,Fy_dbstr
''自定义需要过滤的字串,用 "防" 分隔
Fy_In = "''防;防and防exec防insert防select防delete防update防count防*防%防chr防mid防master防truncate防char防declare防<防防=防|防-防_"
Fy_Inf = split(Fy_In,"防")
If Request.Form<"" Then
For Each Fy_Post In Request.Form

For Fy_Xh=0 To Ubound(Fy_Inf)
If Instr(LCase(Request.Form(Fy_Post)),Fy_Inf(Fy_Xh))<0 Then
Response.Write "<Script Language=JavaScriptalert('网长友情提示黑客大侠↓nn请不要在参数中包含非法字符尝试注入攻击本站,本站做起来很不容易的.俺是菜鸟,好怕怕,放俺一马吧nnQQ:6407443nn有话好话,请用QQ和俺联系');</Script"

Response.Write "非法操作!本站已经给大侠您做了如下记录↓<br"
Response.Write "操作IP:"&Request.ServerVariables("REMOTE_ADDR")&"<br"
Response.Write "操作时间:"&Now&"<br"
Response.Write "操作页面:"&Request.ServerVariables("URL")&"<br"
Response.Write "提交方式:POST<br"
Response.Write "提交参数:"&Fy_Post&"<br"
Response.Write "提交数据:"&Request.Form(Fy_Post)
Response.End
End If
Next
Next
End If
If Request.QueryString<"" Then
For Each Fy_Get In Request.QueryString
For Fy_Xh=0 To Ubound(Fy_Inf)
If Instr(LCase(Request.QueryString(Fy_Get)),Fy_Inf(Fy_Xh))<0 Then
Response.Write "<Script Language=JavaScriptalert('网长友情提示黑客大侠↓nn请不要在参数中包含非法字符尝试注入攻击本站,本站做起来很不容易的.俺是菜鸟,好怕怕,放俺一马吧nnQQ:6407443nn有话好话,请用QQ和俺联系');</Script"
Response.Write "非法操作!本站已经给大侠您做了如下记录↓<br"
Response.Write "操作IP:"&Request.ServerVariables("REMOTE_ADDR")&"<br"
Response.Write "操作时间:"&Now&"<br"
Response.Write "操作页面:"&Request.ServerVariables("URL")&"<br"
Response.Write "提交方式:GET<br"
Response.Write "提交参数:"&Fy_Get&"<br"
Response.Write "提交数据:"&Request.QueryString(Fy_Get)
Response.End
End If
Next
Next
End If
%
<%
dim conn
dim connstr
on error resume next
'DBQ="+server.mappath("admin/admins_news.mdb")+";
'"driver={Microsoft Access Driver (*.mdb)};dbq=" & server.mappath("db.MDB")
set conn=server.createobject("ADODB.CONNECTION")
connstr="DBQ="+server.mappath("admin/admins_news.mdb")+";DefaultDir=;DRIVER={Microsoft Access Driver (*.mdb)};"
conn.open connstr
%

3、通用的SQL防注入程序一般的http请求不外乎get 和 post,所以只要我们在文件中过滤所有post或者get请求中的参数信息中非法字符即可,所以我们实现http 请求信息过滤就可以判断是是否受到SQL注入攻击。
  IIS传递给asp.dll的get 请求是是以字符串的形式,,当 传递给Request.QueryString数据后,asp解析器会分析Request.QueryString的信息,,然后根据"&",分出各个数组内的数据所以get的拦截如下:
  首先我们定义请求中不能包含如下字符:


引用:
--------------------------------------------------------------------------------

|and|exec|insert|select|delete|update|count|*|%|chr|mid|master|truncate|char|declare

--------------------------------------------------------------------------------


各个字符用"|"隔开,,然后我们判断的得到的Request.QueryString,具体代码如下 :

引用:
--------------------------------------------------------------------------------

dim sql_injdata
SQL_injdata = "'|and|exec|insert|select|delete|update|count|*|%|chr|mid|master|truncate|char|declare"
SQL_inj = split(SQL_Injdata,"|")
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=****>alert('天下电影联盟SQL通用防注入系统提示↓nn请不要在参数中包含非法字符尝试注入!');history.back(-1)</Script>"
    Response.end
   end if
  next
 Next
End If

--------------------------------------------------------------------------------


这样我们就实现了get请求的注入的拦截,但是我们还要过滤post请求,所以我们还得继续考虑request.form,这个也是以数组形式存在的,我们只需要再进一次循环判断即可。代码如下:

引用:
--------------------------------------------------------------------------------

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=****>alert('天下电影联盟SQL通用防注入系统提示↓nn请不要在参数中包含非法字符尝试注入!</Script>"
    Response.end
   end if
  next
 next
end if

4、以下代码是网上流行的枫叶防SQL注入通用版的代码,我在原来的基本上去掉一些内容,使之简单化.以代码拷进记事本,另存为asp文件。然后在数据库连接文件那里加上包含代码就行了,例如:
<!-- #include file="文件名" --

以下是代码
<%
'--------定义部份------------------
Dim Fy_Post,Fy_Get,Fy_In,Fy_Inf,Fy_Xh,Fy_db,Fy_dbstr
'自定义需要过滤的字串,用 "枫" 分隔
Fy_In = "'枫;枫and枫exec枫insert枫select枫delete枫update枫count枫*枫%枫chr枫mid枫master枫truncate枫char枫declare"
'----------------------------------
%

<%
Fy_Inf = split(Fy_In,"枫")
'--------POST部份------------------
If Request.Form<"" Then
For Each Fy_Post In Request.Form

For Fy_Xh=0 To Ubound(Fy_Inf)
If Instr(LCase(Request.Form(Fy_Post)),Fy_Inf(Fy_Xh))<0 Then
Response.write"非法入侵"
Response.End
End If
Next

Next
End If
'----------------------------------

'--------GET部份-------------------
If Request.QueryString<"" Then
For Each Fy_Get In Request.QueryString

For Fy_Xh=0 To Ubound(Fy_Inf)
If Instr(LCase(Request.QueryString(Fy_Get)),Fy_Inf(Fy_Xh))<0 Then
Response.write"非法入侵"
Response.End
End If
Next
Next
End If
%

'----------代码结束-------------


以上代码重点在
Response.write"非法入侵"

你可以修改成通用的:
Response.write"处理url地址有错误,请与管理员联系"
也就是有人想入侵,就会提示"处理url地址有错误,请与管理员联系"
展开更多 50%)
分享

猜你喜欢

sql注入防范方法

ASP
sql注入防范方法

防范SQL注入式攻击

SQLServer
防范SQL注入式攻击

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

JSP如何防范SQL注入攻击

Web开发
JSP如何防范SQL注入攻击

JSP 防范SQL注入攻击分析

Web开发
JSP 防范SQL注入攻击分析

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

防范sql注入式攻击js版本

Web开发
防范sql注入式攻击js版本

SQL注入程序带来的攻击及防范

Web开发
SQL注入程序带来的攻击及防范

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

你会玩Windows Vista的新游戏吗?

你会玩Windows Vista的新游戏吗?

如何把ASP编写成DLL

如何把ASP编写成DLL
下拉加载更多内容 ↓