您的位置:首页 > 编程语言

楼主你的如下博客中的代码有安全漏洞

2016-09-12 21:22 495 查看
楼主你的如下博客中的代码有安全漏洞:
http://blog.csdn.net/xyang81/article/details/7727141
------------------------------------------------------------------------------------------

如果用户张三将邮件中收到的链接中的id或username改成别人的(如李四的),就能够:

1,

将其他用户(李四)已经验证的邮箱再变为未验证的状态

2,

查看其他用户(李四)的数据,因为他已经用李四的身份登录了,只是他(李四)的邮箱状态为未认证,权限有限制而已
3,

重设其他任何用户的密码,只要知道其username即可

------------------------------------------------------------------------------------------

1和2的证明如下:
http://localhost:8080/AccountActivate/activateAccount?id=800&checkCode=any_thing_here
上面id=800,而800是李四的,

张三用上面修改过id的链接访问网站,

在ActivateAccountServle中

User user = userDao.findUserById(id);

user.setActivated(GenerateLinkUtils.verifyCheckcode(user, request));

userDao.updateUser(user);  

request.getSession().setAttribute("user", user);

request.getRequestDispatcher("/accountActivateUI").forward(request, response);

代码中未加判断,直接把李四的activated状态给set了, 由于checkCode的值是随便写的,或者是张三自己的checkcode,

verifyCheckcode()会返回false

那么李四的activated被设置为false,即邮箱状态又变成未验证了,因为update到DB里了.

更可怕的是,李四的user信息直接被存到session中去了,也就是说张三直接以李四的身份登录了

那么他可以做很多事情,只要不是那些要求邮箱必须为验证状态的事情,张三都可以做.

例如查看李四的账号信息,业务信息等.

当然这只是粗心所致,修改起来也很简单:

只要才上述几个步骤前加如下判断即可

if(GenerateLinkUtils.verifyCheckcode(user, request)){

//上面那些代码应放到这里
}

------------------------------------------------------------------------------------------

3的证明如下:

用户点击重置密码的链接后, servlet中没有检查checkcode的值, 所以无法判断此链接是否是伪造的,见下图



即使上面判断了checkcode也不行,因为你在用户重置密码时,所修改的用户名居然是让用户自主提交的.



String userName = request.getParameter("userName");  //这里的用户名来自客户提交的表单

String newPassword = request.getParameter("newPassword");  

String newPassword2 = request.getParameter("newPassword2");  

         

UserDao userDao = UserDaoImpl.getInstance();  

User user = userDao.findUserByName(userName);  //根据此用户名得到User

user.setPassword(newPassword);  //然后未经判断,直接把此用户的密码给改掉了, 这样任何一个用户都可以修改其他人的密码了,只要得到别人的用户名.

解决方法: 通过验证码锁定用户信息后,将User对象存在session里,始终不要发给客户端, 注意:千万不要把此用户名发的客户端的hidden中,因为hidden是不安全的,客户可以通过源代码看到并很容易在提交前篡改.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: