网站的噩梦——SQL注入
SQL注入通过网页对网站数据库进行修改。它能够直接在数据库中添加具有管理员权限的用户,从而最终获得系统管理员权限。黑客可以利用获得的管理员权限任意获得网站上的文件或者在网页上加挂木马和各种恶意程序,对网站和访问该网站的网友都带来巨大危害。
防御SQL注入妙法
第一步:下载SQL通用防注入系统的程序,在需要防范注入的页面头部用<!--# include file=”xxx.asp”-- >来防止别人进行手动注入测试。
可是如果通过SQL注入分析器就可轻松跳过防注入系统并自动分析其注入点,然后只需几秒钟,你的管理员帐号及密码就会被分析出来。
第二步:对于注入分析器的防范,笔者通过实验,发现了一种简单有效的防范方法。首先我们要知道SQL注入分析器是如何工作的。在操作过程中,发现软件并不是冲着“admin”管理员帐号去的,而是冲着权限(如flag=1)去的。这样一来,无论你的管理员帐号怎么变都无法逃过检测。
第三步:既然无法逃过检测,那我们就做两个帐号,一个是普通的管理员帐号,一个是防注入的帐号。为什么这么说呢?笔者想,如果找一个权限最大的帐号制造假象,吸引软件的检测,而这个帐号里的内容是大于千字以上的中文字符,就会迫使软件对这个帐号进行分析的时候进入全负荷状态甚至资源耗尽而死机。下面我们就来修改数据库吧。
1、对表结构进行修改。将管理员的帐号字段的数据类型进行修改,文本型改成最大字段255(其实也够了,如果还想做得大点,可以选择备注型),密码的字段也进行相同的设置。
2、对表进行修改。设置管理员权限的帐号放在ID1,并输入大量中文字符(最好大于100个字)。
3、把真正的管理员密码放在ID2后的任何一个位置(如放在ID549上)。
我们通过上面的三步完成了对数据库的修改。
这时是不是修改结束了呢?其实不然,要明白你做的ID1帐号其实也是真正有权限的帐号,现在计算机处理速度那么快,要是遇上个一定要将它算出来的软件,这也是不安全的。我想这时大多数人已经想到了办法,对,只要在管理员登陆的页面文件中写入字符限制就行了!就算对方使用这个有上千字符的帐号密码也会被挡住的,而真正的密码则可以不受限制。
终极防范SQL注入漏洞
其实SQL注入漏洞并不可怕,知道原理 + 耐心仔细,就可以彻底防范!
下面给出4个函数,足够你抵挡一切SQL注入漏洞!读懂代码,你就能融会贯通。
注意要对所有的request对象进行过滤:包括 request.cookie, request.ServerVariables 等等容易被忽视的对象:
-----------------------------------------
function killn(byval s1) '过滤数值型参数
if not isnumeric(s1) then
killn=0
else
if s1<0 or s1>2147483647 then
killn=0
else
killn=clng(s1)
end if
end if
end function
-----------------------------------------
function killc(byval s1) 过滤货币型参数
if not isnumeric(s1) then
killc=0
else
killc=formatnumber(s1,2,-1,0,0)
end if
end function
function killw(byval s1) '过滤字符型参数
if len(s1)=0 then
killw=""
else
killw=trim(replace(s1,"'",""))
end if
end function
-----------------------------------------
function killbad(byval s1) 过滤所有危险字符,包括跨站脚本
If len(s1) = 0 then
killbad=""
else
killbad = trim(replace(replace(replace(replace
(replace(replace(replace(replace(s1,Chr(10), "<br>"),
Chr(34), """), ">", ">"), "<", "<"), "&", "&"),
chr(39),"'"),chr(32)," "),chr(13),""))
end if
end function
-----------------------------------------