首页 > 编程知识 正文

数据越权问题,防范数据横向越权的最佳方法

时间:2023-05-06 15:54:50 阅读:9500 作者:1501

龚越权:龚越权是指攻击者尝试访问与他具有相同权限的用户的资源

纵向越权:纵向越权是指低级攻击者尝试访问高级用户的资源

对于纵向越权,可以通过设置用户角色并为每个角色提供不同的权限来避免。

关于横向越权,很麻烦。 在横向越权中,用户忘记密码并重置密码时,回答问题进入密码重置阶段时,只要知道其他用户的用户名,就可以轻松更改该用户的密码,实现越权访问

在这种情况下,为了防止横向越权,可以使用缓存进行辅助。 如果问题的答案正确,则在高速缓存中保存用户名和唯一数字对的数据,并返回包含的唯一数据。 重置密码时,我们的参数不仅需要用户名和密码,还需要前面生成的唯一数字。 根据用户名从缓存中检索对应的数字,如果有检索到的数字和传递给参数的想法等,就证明重置的当前用户的密码。 否则,不然,不重置。

重置密码并回答问题

publicserverresponsecheckanswer (字符串用户名称、字符串question、字符串answer ) int result count=user mapper.check answer ()

stringforgettoken=uuid.random uuid ().toString ); //放入缓存

token cache.setkey (token cache.token _ prefix username,forgetToken ); returnserverresponse.createbysuccess (forget token );

} returnserverresponse.createbyerror ('用户回答错误);

}

密码重置

publicserverresponseforgetresetpassword (字符串用户名,字符串密码新,字符串格式令牌) IF(stringutils.ISBlanng

}

serverresponsevalidresponse=this.check valid (username,Const.USERNAME ); if(validresponse.issuccess () (returnserverresponse.createbyerror ) )“用户不存在”;

之所以不使用//session而使用Cache,是因为在APP应用程序结束时,如果缓存没有过期,则下次启动程序时缓存数据会保留下来//但Seesion中的数据只有一组

string token=token cache.getkey (token cache.token _ prefix username ); if(stringutils.isblank(Token ) ) }

server response.createbyerror (' token无效或过期);

}if(stringutils.equals(Token,forgetToken ) ) ) )。

string m D5 password=m D5 util.m D5 encode utf8(password new ); int result count=user mapper.updatepasswordbyusername (username,md5Password ); if (结果计数0 ) returnserverresponse.createbysuccess (“密码更改成功”)

}

} else { returnserverresponse.createbyerror (' token错误。 请重新获取更改了密码的token ' );

} returnserverresponse.createbyerror ('密码更新失败);

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。