预防jsp空间中get方式传递参数被修改的办法2

2013/4/8 8:50:49 | 阅5441 来源:好空间网络 [打印] [关闭]
 

 

上一节我们讲过预防数字的传递值被非法修改

 

现在我们说下更复杂的,就是传递的参数不光只是数字,也可能是其他的英文或者汉字,甚至特殊符号,有时候不光是传递一个参数,可能传递多个参数,怎么样预防这些传递的参数不被用户修改呢?

 

比如 jspkongjian.jsp?user=haokongjian&password=www.jspkongjian.net

 

这样的一个连接,我们在接收的时候怎么知道用户有没有把他修改呢??

 

比如用户把上面的url修改为

 

jspkongjian.jsp?user=haokongjian&value=你好www.jspkongjian.net or 1=1

 

呵呵这个就是非常著名的sql注入了,一般用在用户登陆或者网站后台管理的地方,如果您不做什么验证直接执行,那么用户就可以跳过您的用户密码直接登陆!这个曾经是很流行的攻击网站的办法

 

对于这个问题我参考了腾讯这些大公司的,尤其是qzone,我发现了一个特点,就是当传递的参数的时候他们的后面总是跟着一个md5,

 

跟个md5有什么用呢?? 其实就是把要传递的值,把他md5加密后,把加密后的这个md5值也传递过去

 

到了接收页,在把传递来的值加密,看看和先前加密的md5值是不是一样,如果一样就说明用户没有修改过传递的参数,反之就是用户修改过参数!返回个提示给用户就可以了!!

 

具体怎么实现呢,我这里写个详细的教程给大家,大家可以参考下!!

 

先建立个md5文件,上网可以搜索到 这里呢我把md5的文件上传,大家可以直接下载使用

 

dtrewe.zip


dtree.zip

 

下载解压后放到\ROOT\WEB-INF\classes\beartool\MD5.class 下就可以了,如果没有这个目录就建立这个路径!!

 

 

然后我们建立个jsp网页

 

Jspkongjian.jsp内容如下:

 

<%@ page contentType="text/html; charset=gb2312" language="java" import="java.sql.*" errorPage="" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>好空间网络测试传递url值是否被修改的例子--www.jspkongjian.net</title>
</head>
<body>
<jsp:useBean id='oMD5' scope='request' class='beartool.MD5'/>
<%
String user="abc"; //准备要传递的用户的会员名称
String password ="123qwert"; //准备要传递的用户的密码
String key = "haokongjian"; //用来加密的密钥
String pwdmd5 = oMD5.getMD5ofStr(user+password+key); //把用户名称和密码加密
%>
<a href="haokongjian.jsp?user=<%=user%>&password=<%=password%>&md5=<%=pwdmd5%>">好空间网络测试传递url值是否被修改的例子
</a>
</body>
</html>

 

 

 

 

这里本来是传递2个参数,即用户名称和密码,但是我们把他加密后得到一个md5,我们把这个md5也传递过去,用来和后面的接收页的做对比!!

 

我们看看接收页haokongjian.jsp

 

 

 

<%@ page contentType="text/html; charset=gb2312" language="java" import="java.sql.*" errorPage="" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>好空间网络测试传递url值是否被修改的例子--www.jspkongjian.net</title>
</head>
<body>
<jsp:useBean id='oMD5' scope='request' class='beartool.MD5'/>
<%
String user=request.getParameter("user"); //接收传递的用户的会员名称
String password =request.getParameter("password");  //接收喜欢滴过来的用户密码
String md5 =request.getParameter("md5");  //接收传递过来的md5
if(user==null || user =="" || password==null || password=="" || md5==null || md5 ==""){
out.print("参数缺少!");
return;
}
//上面是判断用户有没有把参数参数没有传递参数过来
String key = "haokongjian"; //用来加密的密钥
String pwdmd5 = oMD5.getMD5ofStr(user+password+key); //把接收来的用户名称和密码加密
if (pwdmd5.equals(md5))
{
out.print("参数没有被修改");
}else{
out.print("参数被修改!");
}
%>
</body>
</html>
 

 

程序里我已经做了详细的注释,应该不用怎么太解释大家都应该能看得懂!!

 

原理就是,把接收来的用户名称和密码,在把他加密,看看加密后的数字与传递过来的md5是不是一样,如果是一样就没有修改过,可以继续执行以后的操作,反之如果不一样就说明用户修改过,提示用户参数被修改!!

 

 

好了就是这样,我的水平也是有限,如果那里写的不对,欢迎通知我!!!

 

文章来源 http://www.jspkongjian.net/news.jsp?id=787    转载请保留出处!谢谢!

 

经营许可证ICP:皖B2-20100052 公司邮箱:zcdnsz@jspkongjian.net
Copyright © 2004-2015, 安徽好空间网络科技有限公司 版权所有 , 本站素材部分来源于网络,如有侵权请告知删除。