|
![]() |
名片设计 CorelDRAW Illustrator AuotoCAD Painter 其他软件 Photoshop Fireworks Flash |
|
############################################## 本文所有代码版权归属[雨浪],转载请声明 ############################################## asp最脆弱的不是技术,而是防范黑客攻击 而无论怎样攻击,就两点 通过QueryString和form 只要这两处防范好了,问题就解决了 下面是我自家独创的一些代码,供大家参考 一.防通过querystring的sql攻击 一般sql能够攻击的页面通常是在参数为数字的页面 1.首先我们做一个警告子过程 \\\'\\\'\\\'\\\'\\\'子过程功能:错误信息提示\\\'\\\'\\\'\\\'\\\'\\\'\\\'\\\'\\\'\\\'\\\'\\\'\\\'\\\'\\\'\\\'\\\'\\\' \\\'\\\'\\\'\\\'\\\'参数说明:errmsg 错误信息说明 var 处理方法 1返回不刷新 2返回上页 3关闭页面\\\'\\\'\\\'\\\'\\\'\\\'\\\'\\\'\\\'\\\'\\\'\\\'\\\'\\\'\\\'\\\'\\\'\\\' Public sub alarm(errmsg,var) response.Write("<table width=514 height=293 border=0 align=center cellpadding=0 cellspacing=0>") response.Write("<tr><td height=43><img src=images/error_bg.gif width=514 height=43></td></tr><tr>") response.Write("<td height=239 valign=top> ") response.Write("<table width=\\\'100%\\\' height=\\\'100%\\\' cellpadding=0 cellspacing=1 bgcolor=\\\'#cccccc\\\' style=\\\'border-left:1px solid #DDDDDD;border-right:1px solid #DDDDDD\\\'>") response.Write("<tr bgcolor=\\\'#FFFFFF\\\'><td width=\\\'57%\\\' align=\\\'center\\\'><img src=\\\'images/error_show.gif\\\' width=\\\'272\\\' height=\\\'92\\\'></td>") response.Write("<td width=\\\'43%\\\' align=\\\'center\\\'><div align=\\\'center\\\' style=\\\'line-height:150%\\\'><font color=\\\'#0099FF\\\' style=\\\'font-size:9pt\\\'>对于操作失败我们表示抱歉!<br>假如仍有问题,请给我们发送错误报告 </font></div></td></tr>") response.Write("<tr bgcolor=\\\'#FFFFFF\\\'><td height=25 colspan=2> <strong><font color=#0099FF style=\\\'font-size:9pt\\\'>操作失败的可能原因:</font></strong></td></tr>") response.Write("<tr bgcolor=\\\'#FFFFFF\\\'><td height=86 colspan=2>") response.Write("<table width=\\\'100%\\\' border=0 cellspacing=0 cellpadding=0>") response.Write("<tr><td width=\\\'2%\\\'> </td>") response.Write("<td width=\\\'98%\\\'><font style=\\\'font-size:9pt\\\' color=\\\'#FF0000\\\'>"&errmsg&"</font></td>") response.Write("</tr></table></td></tr><tr align=center bgcolor=\\\'#FFFFFF\\\'><td height=49 colspan=2>") if var=1 then response.Write("<a href=\\\'javascript:history.go(-1)\\\'><img src=\\\'images/error_enterenter.gif\\\' width=\\\'61\\\' height=\\\'21\\\' style=\\\'cursor:hand\\\' border=\\\'0\\\'></a>") elseif var=2 then response.Write("<a href=\\\'javascript:location.href=\\\'"&request.ServerVariables("HTTP_REFERER")&"\\\'><img src=\\\'images/error_enterenter.gif\\\' width=\\\'61\\\' height=\\\'21\\\' style=\\\'cursor:hand\\\' border=\\\'0\\\'></a>") elseif var=3 then response.Write("<a href=\\\'javascript:window.close()\\\'><img src=\\\'images/error_enterenter.gif\\\' width=\\\'61\\\' height=\\\'21\\\' style=\\\'cursor:hand\\\' border=\\\'0\\\'></a>") end if response.Write("</td></tr></table></td></tr><tr>") response.Write("<td height=9><img src=\\\'images/error_down.gif\\\' width=\\\'514\\\' height=\\\'9\\\'></td></tr></table>") End Sub 2.写一个验证数字的函数 \\\'\\\'\\\'\\\'\\\'函数功能:检测是否为数字并且数字是否有效\\\'\\\'\\\'\\\'\\\'\\\'\\\'\\\'\\\'\\\'\\\'\\\'\\\'\\\'\\\'\\\'\\\'\\\' \\\'\\\'\\\'\\\'\\\'返 回 值:boolean\\\'\\\'\\\'\\\'\\\'\\\'\\\'\\\'\\\'\\\'\\\'\\\'\\\'\\\'\\\'\\\'\\\'\\\'\\\'\\\'\\\'\\\'\\\'\\\'\\\'\\\'\\\'\\\'\\\'\\\'\\\'\\\'\\\'\\\'\\\'\\\'\\\'\\\'\\\'\\\'\\\' Public function isInteger(para) if isnumeric(para)=false then isinteger=false dim str dim l,i if isNUll(para) then isInteger=false exit function end if str=cstr(para) if trim(str)="" then isInteger=false exit function end if l=len(str) for i=1 to l if mid(str,i,1)>"9" or mid(str,i,1)<"0" then isInteger=false exit function end if next isInteger=true end function 3.写一个对querysting参数是否为数字的验证过程 \\\'\\\'\\\'\\\'\\\'\\\'\\\'\\\'\\\'\\\'\\\'子过程功能,验证参数是否为数字 \\\'\\\'\\\'\\\'\\\'\\\'\\\'\\\'\\\'\\\'\\\'参数说明:manage 处理方法:1=提示信息并关闭页面,2=转向页面,3=先提示再转向 redi 出错时转向的页面,str:接受检测的变量 public sub integerok(manage,redi,str) if isinteger(str)=false then select case manage case 1 response.Write("<script language=javascript>alert(\\\'地址栏中的参数错误,本页面将自动关闭\\\');window.close();</script>") case 2 Response.Write "<Script Language=JavaScript>location.href=\\\'"&redi&"\\\'</Script>" case 3 Response.Write "<Script Language=JavaScript>alert(\\\'地址栏中的参数错误,本页将自动导向其他页面\\\');location.href=\\\'"&redi&"\\\';</Script>" end select end if end sub 4.写一个对qureystring整体验证的子过程 \\\'\\\'\\\'\\\'\\\'\\\'\\\'\\\'\\\'\\\'\\\'参数说明:manage 处理方法:1=提示信息并关闭页面,2=转向页面,3=先提示再转向 redi 出错时转向的页面 public sub saferush(manage,redi) Dim my_Url,my_a,my_x,my_Cs(),my_Ts \\\'my_url:转接过来的url地址 my_a:获取url地址中用&隔开的字符串数组 my_Url=Request.ServerVariables("QUERY_STRING") \\\'my_x:interger my_cs()动态数组 my_a=split(my_Url,"&") redim my_Cs(ubound(my_a)) On Error Resume Next for my_x=0 to ubound(my_a) my_Cs(my_x) = left(my_a(my_x),instr(my_a(my_x),"=")-1) Next For my_x=0 to ubound(my_Cs) If my_Cs(my_x)<>"" Then If Instr(LCase(Request(my_Cs(my_x))),"\\\'")<>0 or Instr(LCase(Request(my_Cs(my_x))),"and")<>0 or Instr(LCase(Request(my_Cs(my_x))),"select")<>0 or Instr(LCase(Request(my_Cs(my_x))),"update")<>0 or Instr(LCase(Request(my_Cs(my_x))),"chr")<>0 or Instr(LCase(Request(my_Cs(my_x))),"delete%20from")<>0 or Instr(LCase(Request(my_Cs(my_x))),";")<>0 or Instr(LCase(Request(my_Cs(my_x))),"insert")<>0 or Instr(LCase(Request(my_Cs(my_x))),"mid")<>0 Or Instr(LCase(Request(my_Cs(my_x))),"master.")<>0 Then Select Case manage Case "1" Response.Write "<Script Language=JavaScript>alert(\\\'出现错误!参数 "&my_Cs(my_x)&" 的值中包含非法字符串!/n/n 请不要在参数中出现:;,and,select,update,insert,delete,chr 等非法字符!\\\');window.close();</Script>" Case "2" Response.Write "<Script Language=JavaScript>location.href=\\\'"&redi&"\\\'</Script>" Case "3" Response.Write "<Script Language=JavaScript>alert(\\\'出现错误!参数 "&my_Cs(my_x)&"的值中包含非法字符串!/n/n 请不要在参数中出现:;,and,select,update,insert,delete,chr 等非法字符!\\\');location.href=\\\'"&redi&"\\\';</Script>" End Select Response.End End If End If Next end sub 好了下面举实例说明: 假设存在一个http://www.webasp.net/tech/admin_news_tg.asp?class=1的页面 可以如此防范 call saferush(2,"../") classid = Request.querystring("classid") call integerok(2,"../",classid) 二.对表单提交进行防范,很简朴啦:) sub safeform(var) Form_Badword="\\\'∥%∥&∥*∥#∥@∥(∥)∥=" \\\'在这部份定义post非法参数,使用"∥"号间隔 On Error Resume Next if request.form<>"" then Chk_badword=split(Form_Badword,"∥") FOR EACH name IN Request.Form for i=0 to ubound(Chk_badword) If Instr(LCase(request.form(name)),Chk_badword(i))<>0 Then if var=1 then Response.Write "<Script Language=JavaScript>alert(\\\'出错了!表单包含非法字符串!/n/n请不要在表单中出现非法字符!\\\');history.go(-1);</Script>" elseif var=2 then qczc.Err_List"<li>出错了!在您提交的表单中包含非法字符串<li>请不要在表单中出现非法的字符串<li>在此过程中,我们已将您的IP记录在案",1 end if Response.End End If NEXT NEXT end if end sub 使用方式,只要在提交表单的页面头部加一条语句就可以了 <%call safeform(2)%> 返回类别: 教程 上一教程: 改进的SQL防注入(加强抑错) 下一教程: 升级MD5.ASP,打造完全动态不重复的安全加密代码 您可以阅读与"全面防备asp网站防黑客攻击[我的原创]"相关的教程: · ASP网站漏洞解析及黑客入侵防范方式 · 如何用ASP编写网站统计系统(三) · 如何用ASP编写网站统计系统(四) · 为自己的ASP网站系统构建一套标记语言 · 在ASP网站设计中表单验证 |
![]() ![]() |
快精灵印艺坊 版权所有 |
首页![]() ![]() ![]() ![]() ![]() ![]() ![]() |