资源描述:
《如何防范sql注入漏洞》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、如何防范SQL注入漏洞,下面给出4个函数,足够你抵挡一切SQL注入漏洞!读懂代码,你就能融会贯通。注意要对所有的request对象进行过滤:包括request.cookie,request.ServerVariables等等容易被忽视的对象:functionkilln(byvals1)'过滤数值型参数ifnotisnumeric(s1)thenkilln=0elseifs1<0ors1>2147483647thenkilln=0elsekilln=clng(s1)endifendifendfunctionfunctio
2、nkillc(byvals1)过滤货币型参数ifnotisnumeric(s1)thenkillc=0elsekillc=formatnumber(s1,2,-1,0,0)endifendfunctionfunctionkillw(byvals1)'过滤字符型参数iflen(s1)=0thenkillw=""elsekillw=trim(replace(s1,"'",""))endifendfunctionfunctionkillbad(byvals1)过滤所有危险字符,包括跨站脚本Iflen(s1)=0thenkil
3、lbad=""elsekillbad=trim(replace(replace(replace(replace(replace(replace(replace(replace(s1,Chr(10),"
"),Chr(34),"""),">",">"),"<","<"),"&","&"),chr(39),"'"),chr(32),""),chr(13),""))20currencydeposit,weprescribeapassonaregularbasis,qilucardaccountonar
4、egularbasis),certificatebondsandsavingsbonds(electronic);3.notdrawnonabanksavingscertificate,certificatebondsapplyformortgageloans,acceptingonlythelenderendifendfunctionSQL注入攻击的种类和防范手段观察近来的一些安全事件及其后果,安全专家们已经得到一个结论,这些威胁主要是通过SQL注入造成的。虽然前面有许多文章讨论了SQL注入,但今天所讨论的内容也许可
5、帮助你检查自己的服务器,并采取相应防范措施。SQL注入攻击的种类知彼知己,方可取胜。首先要清楚SQL注入攻击有哪些种类。1.没有正确过滤转义字符在用户的输入没有为转义字符过滤时,就会发生这种形式的注入式攻击,它会被传递给一个SQL语句。这样就会导致应用程序的终端用户对数据库上的语句实施操纵。比方说,下面的这行代码就会演示这种漏洞:statement:="SELECT*FROMusersWHEREname='"+userName+"';"这种代码的设计目的是将一个特定的用户从其用户表中取出,但是,如果用户名被一个恶意的用
6、户用一种特定的方式伪造,这个语句所执行的操作可能就不仅仅是代码的作者所期望的那样了。例如,将用户名变量(即username)设置为:a'or't'='t,此时原始语句发生了变化:SELECT*FROMusersWHEREname='a'OR't'='t';如果这种代码被用于一个认证过程,那么这个例子就能够强迫选择一个合法的用户名,因为赋值't'='t永远是正确的。在一些SQL服务器上,如在SQL Server中,任何一个SQL命令都可以通过这种方法被注入,包括执行多个语句。下面语句中的username的值将会导致删除“
7、users”表,又可以从“data”表中选择所有的数据(实际上就是透露了每一个用户的信息)。a';DROPTABLEusers;SELECT*FROMdataWHEREnameLIKE'%20currencydeposit,weprescribeapassonaregularbasis,qilucardaccountonaregularbasis),certificatebondsandsavingsbonds(electronic);3.notdrawnonabanksavingscertificate,certif
8、icatebondsapplyformortgageloans,acceptingonlythelender这就将最终的SQL语句变成下面这个样子:SELECT*FROMusersWHEREname='a';DROPTABLEusers;SELECT*FROMDATAWHEREnameLIKE'%';其它的SQL执行不会将执行同样