一次次的SQL注射入侵,一次次的网站被黑,总是那句话,漏洞在所难免,难道一点办法都没吗?这篇文章就是为大家解析下SQL注 射的原理,以及给出一些预防方法。, W9 W8 \0 R Y1 A: e( G6 P/ c
一:基础篇
分析下漏洞产生的原因,主要还是参数没完全过滤。- E5 v% c f* i: A- }
cntid = Request("cntid")
这样的语句就存在一个注入攻击,首先,没验证是否为整数
解决方法:
<% dim cntid
cntid =replace(request("cntid "),"","")) `$ K# j$ z/ B" y* P
if (not isnumeric(cntid)) then
call error! i% K' \; K: @- h; B
response.end
end if% w/ D6 K ^8 D9 p+ y/ p
sub Error()8 h2 T/ }8 w3 M8 }: }+ W
response.write " <table align=center width=300 border=0 ! J' ^' ~( Z5 t! \- ?
cellpadding=4 cellspacing=0 >"2 Y k! a. I% A
response.write " <tr > "1 \' R, E1 Z9 D2 {) h
response.write " <td colspan=2 height=15> "
response.write " <div align=center>! o3 f- s1 M, D$ ~: E
操作: 参数错误!</div>"1 {8 ^. h) s* _% i, p; K X
response.write " </td>"9 N7 }+ r3 A; p [+ V
response.write " </tr>"
response.write " <tr> "
response.write " <td colspan=2 height=23> ") {7 X* \% J& e5 w7 e
response.write " <div align=center><br><br>"4 V9 j4 [: |3 B. M# v% i* j
response.write " 参数错误!!!非法探测已经被记录 <br><br>"
response.write " <a href=javascript
nclick=history.go(-1)>返回</a>"
response.write " <br><br></div></td>"
response.write " </tr> </table></body></html>" % |" J# M' m* t6 r; V% k* h, y
end sub" f$ f" S* R3 \9 N
%>1 p$ J- x( E+ U5 ?: B
( w3 l6 O$ b& m. i* h
这是一个最基础的过滤,如果提交非法参数效果如图1:5 `% } \* X2 U+ X
, i; W9 @) f. E% V- }
那么我们还需要注意什么?) G9 d- P4 t5 _- }" z
用户名的注册,必须过滤掉一些特殊符号,继续刚才的话题,我们假设是username.
<% dim username
username =replace(request("username "),"",""). |6 h; _8 ~9 b7 ]/ y F/ f
if Instr(username,"=")>0 or Instr(username,"%")>0 or Instr(username,chr(32))>0 or Instr(username,"?")>0 or Instr(username,"&")>0 or Instr(username,";")>0 or
Instr(username,",")>0 or Instr(username,"")>0 or Instr(username,",")>0 or Instr& s: I) L% W- a) w2 c; j2 H$ K& d: i# d
(username,chr(34))>0 or Instr(username,chr(9))>0 or Instr(username,"?")>0 or
Instr(username,">")>0 or Instr(username,"<")>0 or Instr(username,"$")>0 or Instr
(username,"#")>0 or Instr(username,"@")>0 then
/ Q, h4 X/ n! [" ]
call error* Z( \5 v/ J4 b; Z, | I
response.end! ]3 P) ~* Q$ I; M; s
end if% m& ^( r* F( T) R4 B' d
sub Error()
response.write " <table align=center width=300 border=0 4 P% [, R4 B5 o9 S& c6 v" i
cellpadding=4 cellspacing=0 >", r0 }% _/ c3 R+ ^' h* B0 n- x
response.write " <tr > "3 ^& R4 L# g, O2 U* z
response.write " <td colspan=2 height=15> "6 w$ }2 i V% m
response.write " <div align=center>操作: 参数错
误!</div>"
response.write " </td>"0 F; R) ~$ }% T5 _9 v: @
response.write " </tr>"
response.write " <tr> "2 r+ e0 G& a l- g/ k
response.write " <td colspan=2 height=23> "
response.write " <div align=center><br><br>"1 v* j: P W4 S! j
response.write " 用户名中含有非法字符(“=”,“%”,
“?”,“&”,“;”,“,”,“”,”?”,“>”,“<”,“$”,“#”,“@”) <br><br>"2 y: i0 H( x x
response.write " <a - ? x o# C/ U
href=javascript
nclick=history.go(-1)>返回</a>"
response.write " <br><br></div></td>"
response.write " </tr> </table></body></html>"
end sub# B" w% I3 D$ D; t* ^) `* U
%>
利用这个原理,我们还能过滤一些可能存在cookies跨站脚本的地方:2 T3 F1 g$ P9 J* V1 I% m
只要过滤cookie,java这样的字眼,方法同上。需要注意的事,类似与用户登陆的地方,用户名一定要username =replace(request("username "),"",""),意思就是把’过滤成”,这样做的目的就是预防’ or ‘’=’这样的入侵。 w! @( p) R. ^( M- w2 J+ @
可是如果类似www.xx.com/list.asp? action = search
我们可以这样过滤% Q) N# d# D+ x [& W3 ~4 e# ?0 R
<% action=request("action")
select case action1 i0 A: A: I4 A1 W$ u. l8 M
case "search"8 U$ E4 i" e7 W
call search()( I; m$ p5 x( ?/ V1 y0 i8 l
case else/ N5 d2 E4 e8 ~4 r
call search()
end select
sub search ()" d% p3 n' {; j d! n9 ~7 h w- h I
这里是search的内容 A1 U( S+ S0 A
end sub3 Y1 i [# L p1 ^
%>
大家可以看到无论对错,都执行search。这样也可以预防SQL。
二:密码安全/ n: _8 Y; z2 Q, z& y* w- o8 A
采用不可逆加密是必须的选择,防止别人探测到密码后暴力破解,MD5用艿氖迪址浅<虻ィ?姹闳フ腋鯩D5函数体,很多源代码都 带。% M/ {% b5 v5 O$ l8 W/ z
<!-- #include file=" md5.asp" --> 这里是引入MD5函数0 C+ e) m v4 p) B
<% dim username
username =md5(md5(replace(request("username "),"","")))
%>( D. e- D) e8 ~' ^% a* E
这里就实现了2次MD5加密,一般2-3次就足够了,暴力破解比较困难:)# D4 g6 L7 M) U% h% Z! A1 W
COOKIES欺骗问题很严重,所以一般后台管理员一定要session验证。实现方法
我们在登入成功后写入
session("btadmin")=rsadmin("admin"): B2 G" {& n+ ^/ w3 @
建立一个验证函数cookies.asp8 o9 P$ Z, r$ H# t4 }
内容如下
<%
if session("btadmin")="" then
response.redirect "admin.asp"0 l! M( Y1 S# m0 E R& N' s
end if { a6 n t% ~; [/ Y; ?
%>
在每个管理员操作文件的开头加上8 A( o; t% f& n+ J# z9 b, M( C8 |; m$ x
<!--#include file="cookies.asp" -->
这样就可以预防非法登陆了:)
我们经常看到验证码这样的东西,这样做是为了预防暴力破解。
实现方法,假设登入为login.asp
我们在开头加:
<%
dim p
randomize ‘对随机数生成器做初始化的动作
p = Int((8999 * Rnd) + 1000)
session("cntcode")=p %>! }1 k% o5 Y8 o& T, _
插入验证代码的表格- o) r' M, J+ a6 u
<tr>( X% l2 t7 Z" A% Y A% Z8 l
<td valign=middle>请输入验证码</td>- k9 z( h; H6 k
<td valign=middle>
<INPUT name=yanzhen type=text>
在左边框输入: <%=session("cntcode")%></td></tr>
最后验证程序:: P, k% L2 j( N$ F, ~+ r
<%+ f+ N/ H0 h' I& ^- @
if request("yanzhen")="" or trim(session("cntcode"))9 _% c; b8 h6 @. s
<>trim(replace(request("yanzhen"),"","")) then9 c' `; m9 Q1 N* d" H$ ?3 D
response.write " 请正确输入您的验证码。"
response.end
else
%>
程序运行效果如图2:' d2 g0 @0 R$ X- r% P! v
/ o2 e7 g K g# \9 a. ^# L: }
三:数据库安全/ e) ^( L* R0 {. N& Z
爆库的方法越来越多,我们来看下:如图3+ m# g! Z* |% W, h. H4 X6 N- D
/ \ ^$ g/ x2 x$ K4 m
按X档案以前文章一位大侠说的,将/替换为 %5c,确实很多网站都存在这样的漏洞。大家可以清楚的看到数据库地址。7 }/ @# D9 [7 @- \% p! j
偶什么方法可以预防呢?
。。。(代码见杂志)。。。。。。。。。。。( c- ~0 q2 j* b# {: S4 g+ b
2 H7 j6 p" M4 T: N! b- J9 J
这是一个数据库连接文件,大部分为conn.asp" X7 |: x7 N' k. O S* H e, \
关键在与on error resume next出错了也执行下一句" M3 ~+ ^( V- [, ^
我们看下他的运行效果。8 U/ O9 n. b% {, T! t
除了图片显示不正常外,没暴露数据库:)2 s$ D2 O9 i6 ]3 W Y
其实浪心建议用WIN2003做服务器,当你用%5c 来替换的时候
_blank>http://127.0.0.1/fourm.asp?cntid=4
自动换成%5cfourm.asp/多个/4 n; ?% k1 V! |* U1 E5 R
_blank>http://127.0.0.1%5cfourm.asp/?cntid=4
找不到服务器,唯一的结果,更厉害:); @& U' s! i2 L8 Y$ V! y/ F6 ^
还有一种方法就是不让对方下载数据库
方法是! X1 _$ J6 R1 I" k4 H a
新建一个notdown表,字段为nodown, 数据类型为ole 如图4
保存为mdb.mdb
OK,我们写个nodown.asp- C5 Z. R; y1 o1 D
代码如下
。。。(代码见杂志)。。。。。。。。。。。
把他同数据库一同上传到你的空间,或者本地做个IIS,运行nodown.asp6 a9 }( F9 g9 h3 j
提示添加记录成功。* b2 A& S- t& f: P
OK,把数据库重新命名为mdb.asp
直接在浏览器里输入数据库地址:提示
Active Server Pages 错误 ASP 0116
丢失脚本关闭分隔符
/bbs/cntlovebbs.asp,行 44042 0 T; d4 b% T$ I" Z2 ^
Script 块缺少脚本关闭标记(%>)。
用快车下载提示HTTP 500错误2 T5 j* {/ Y" F
OK到这里数据库安全也过去了:)下面说下浪心新的思维:)没任何技术难度,会VB的都会写:)
四:安全的后台登入 l1 H$ X; y5 }# C
。。。(代码见杂志)。。。。。。。。。。。
OK了:)程序简单的出奇,他的功能可不小哦:)你的网站可以比以前安全许多。 7 R5 k8 m+ B+ ^5 z7 f
| 欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) | Powered by Discuz! X2.5 |