预防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
下载解压后放到\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 转载请保留出处!谢谢!