请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

防止横向越权,要校验一下这个用户的旧密码,一定要指定是这个用户.因为我们会查询一个count(1),如果不指定id,那么结果就是true啦count>0;

这句话我没有理解清楚,为什么不指定用户,就会count>0,如果数据库中没有这个密码,也会返回count>0吗

正在回答 回答被采纳积分+3

2回答

Geely 2018-04-05 16:37:03

你好,同学,也就是说,具体的一个查询结果,要指定是哪个用户的,也就是userid。

换句话说 结果集要和这个用户绑定。防止查出多余的数据~

2 回复 有任何疑惑可以回复我~
  • 老师说的有道理,如果不指定userid,有可能查出多余的数据,因为如果输入的是一个错误的密码,但是这个密码刚好是别人在数据库中存在的密码,得到的结果也能是 resultCount >0,
    但是应该不会产生把别人的密码给修改掉吧,因为修改密码所用的代码是:
    int updateCount = userMapper.updateByPrimaryKeySelective(user);
    而方法中的user参数是在session中取出来的,也就是修改的密码只能是当前登录的用户的,亲吻老师,这也是属于横向越权吗
    回复 有任何疑惑可以回复我~ 2018-04-26 15:48:46
  • 附上
    resetPassword(String passwordOld,String passwordNew,User user)方法的代码:
    
    
        public ServerResponse<String> resetPassword(String passwordOld,String passwordNew,User user){
            //防止横向越权,要校验一下这个用户的旧密码,一定要指定是这个用户.因为我们会查询一个count(1),如果不指定id,那么结果就是true啦count>0;
            int resultCount = userMapper.checkPassword(MD5Util.MD5EncodeUtf8(passwordOld),user.getId());
            if(resultCount == 0){
                return ServerResponse.createByErrorMessage("旧密码错误");
            }
    
            user.setPassword(MD5Util.MD5EncodeUtf8(passwordNew));
            int updateCount = userMapper.updateByPrimaryKeySelective(user);
            if(updateCount > 0){
                return ServerResponse.createBySuccessMessage("密码更新成功");
            }
            return ServerResponse.createByErrorMessage("密码更新失败");
        }
    回复 有任何疑惑可以回复我~ 2018-04-26 15:50:28
  • 靠,在回复中代码好乱!!!
    回复 有任何疑惑可以回复我~ 2018-04-26 15:51:28
polo哦 2018-04-04 12:59:22

同学,问问题最好讲究方式,一张图都没有,怎么知道你是哪个部分的呢。。

0 回复 有任何疑惑可以回复我~
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信