JSP基本登录模块(防SQL注入攻击)
上一篇 / 下一篇 2009-09-03 15:58:24 / 个人分类:JAVA
在JSP基本登录模块Ⅳ中,如果在密码栏输入“' or '1'='1”,我们发现不知道密码也可以登录成功。
}n2n5g)r+V0这是因为当我们的密码为“' or '1'='1”时,SQL语句变为:51Testing软件测试网K`(Vr,TB)aI
Select * FROM member Where username='magci' and password='' or '1'='1'
-Dt_"m6T0'1'='1'是永真的,这条SQL语句是能通过验证的。
;N c1q?"m uP0Pu0这就是SQL注入攻击。
Y*\XkfU9~)o051Testing软件测试网;iPC,Fz$~
为了防止SQL注入攻击,可以使用PraparedStatement对象操作数据库。51Testing软件测试网O3[&{3Zwz:Q!v;b
改进后的登录模块如下:
Nq.Mdq _?Eec&l051Testing软件测试网nC L`}4r^^Q(A
附加功能:防止SQL注入攻击
W
K(i`-]&e%O051Testing软件测试网*?w#X5j[.?
登录模块至少需要以下几个页面:
j-KQLH&]7V01.检查Cookie页面(index.jsp);
8};j#c5qj$a:t-SCqE"x02.输入用户信息页面(login.jsp);51Testing软件测试网E)Ei
y9oQ1[
3.用户合法性验证页面(check.jsp);
FOx7J;q@04.登录成功欢迎页面(pass.jsp)(检查Session设置);51Testing软件测试网J
y/pU2ku1?Kh
5.登录失败提示页面(failure.jsp);
7n
}8Zp/l;t k!q06.注销登录页面(logout.jsp)。51Testing软件测试网e,U _)p#^
:k]f!@
?,M0数据库:member.mdb
|9A1i
GmA051Testing软件测试网(n0bN`(dBS.q
51Testing软件测试网1~/DBo(I?:axe6ks
结构图:
sR
k#du0q"K!F7q*t
R0
!y$Fz9EMs0---------------------------------------------------------------------
$Pq ?1k@+DPN*f`0
L!Ph,zD7m.V+LM$O }0 index.jsp
]#w&]Un0 |51Testing软件测试网Z$u
aO7S:ry(]
|判断Cookie中有无用户名、密码51Testing软件测试网"c*\ P(xQ
qg EZ/lu
----------------------
!c_A'O(]~)s
H0 | Y N |51Testing软件测试网6Bv0z}9s$E
| V51Testing软件测试网6[FR)D4g
| login.jsp<--------------------
9e6b#b7B%{/pk2~'{/e0 | |输入用户名、密码 |51Testing软件测试网
aAx9|%yP
| V |51Testing软件测试网8xs:C _J4kQ,TF
---------------->check.jsp |
,_i/W?+V lpcS0 |查询用户名、密码 |
:r1r Dd~0 V |
#{M4xM f:P7Y
sP0 member.mdb |
1AOb4R5p:g7jU0 |返回结果 |51Testing软件测试网W-[,M`@a$c
V |51Testing软件测试网TX.I|iyf7wW~
check.jsp |
6GM-AaB0 |判断用户是否合法 |
Km WF+u6a/^V`0 --------------------- |51Testing软件测试网xsm{$I} X t'rW
| Y N | |
5jyO%Y N'PC~0 V V |51Testing软件测试网Xba^*~2i
B)w
pass.jsp failure.jsp------->|
1d/NPH` y!N0 | |51Testing软件测试网
rxG b}h k+s Gb%G
| 检查session是否含有用户名 |51Testing软件测试网mVP u9}\JR
----------------- |
,h0]/\ q7BL3V0 | Y N | |
w3vg
u%rT:]T0 V V |
C~!j'\t!l%D0 pass.jsp 跳转------------------------->|51Testing软件测试网dQ^*M5Q%o
| |
d%r,bO P#Nu0 |注销 |51Testing软件测试网-p5r*vDSF
V |
/Iw|$os&S4s^0 logout.jsp------------------------------------>|
f_X/@!CL@w)Q
N%c051Testing软件测试网8u8q/d!hP"aF
---------------------------------------------------------------------51Testing软件测试网^$@k.O*x6]$I{h C&G
51Testing软件测试网B.XwX4TP~(L
index.jsp:51Testing软件测试网n+j x7bZ3r#w"gh X
<%@ page contentType="text/html;charset=GB2312" %>
7jk3Azp?D0<html>51Testing软件测试网;YNA$lw.R$\y
<head>
C+cN(S:g/\+X[#L0 <title>index</title>
6@9Is:Ls4fSg6nQ0 </head>51Testing软件测试网R{*T'W6S#Xa5I G,I'H
P"x],a2[F0 <body>
:GU T7et3P0 <%
$@|'MufX0 int i;
0\a?6y#TK-Nm(o i0 //初始化,用于保存Cookie中的用户名、密码
)].Y)mn*RRD0 String C_username="";
[OW eif(?l r"v&f%~0 String C_password="";51Testing软件测试网&S-QN*b(C0\
//获取全部Cookie
&E;I"TgD j| ]0 Cookie c[]=request.getCookies();
Gft%f ?+q!a)y@a0 for(i=0;i<c.length;i++)51Testing软件测试网#{ R.m$@CF(yQ0b v
{51Testing软件测试网0b;K%c0dUb
//在Cookie中查找用户名、密码,如果找到,则分别将其赋值给用户名、密码变量51Testing软件测试网3M`X7B!s C^}
if("username".equals(c[i].getName()))51Testing软件测试网G'fK,zcIu\U
C_username=c[i].getValue();
X a*szD9e)W,K0 if("password".equals(c[i].getName()))51Testing软件测试网N;iU1k4BcL
C_password=c[i].getValue();51Testing软件测试网#SM:cu+eG-o@
}51Testing软件测试网/Eet7`2G7Ooi \
if(!"".equals(C_username) && !"".equals(C_password))
i~q#s$oz x0 {
H)Rbf;{9c i*X0 //Cookie中有用户名、密码,将用户名、密码提交到验证页面
pf1{Ze]k&gp0 response.sendRedirect("check.jsp?username="+C_username+"&password="+C_password);51Testing软件测试网{2g8Jp#{G+f8ti.RP
}
e'yS.U)[0q"H.dx {0 else
qG%| t-O!eT%|~%{0 {
"P0k0p([*l)VX.X6P0 //Cookie中没有用户名、密码,跳转到登录页面51Testing软件测试网LO tz{c
%>
L6~ s uJmi^0F"a0 <jsp:forward page="login.jsp" />
?;o+eAx?J0 <%
%zPlD;B_0 }51Testing软件测试网M2uql:dV
%>51Testing软件测试网-k:El$FM
</body>51Testing软件测试网#JlfiU?1R
</html>
v0\(S&h8W?*cJ0
51Testing软件测试网9H(P/GijOE
EI-E+[s[t6m0login.jsp:
<%@ page contentType="text/html;charset=GB2312" %>51Testing软件测试网;\o{w8}"x9M
<html>51Testing软件测试网w&G(W'eM'A[
<head>
ci.pL&a&t Xlck9BF0 <title>登录</title>
r$C_-E Sl"?0 </head>
wkox^g/zS6|N0
I!vP,@.F d)?0 <body>51Testing软件测试网/Kb(J yuUx
<center>51Testing软件测试网4n&x)]RD'F u
<h1>登录页面</h1>
X c"`8U'`0f0 <hr>
)Y9b\M n0 <form action="check.jsp" method="post">51Testing软件测试网yu'h1~0F/K
<table>51Testing软件测试网.W*euYN(F6e&h
<tr>