6-5忘记密码重置问题

来源:6-5 忘记密码中的重置密码功能开发

马斯克2048

2020-06-21

老师,
2:38秒处,
说需要验证username不为blank,原因是说
如果为blank,cachhe中的key会拿到token_的value,这样是禁止的,所以需要验证username不为blank。
我的问题是,为何这样是禁止的?有什么风险呢?

写回答

1回答

geelylucky

2020-06-23

同学,拿到了token_的value,那就泄露了呀,任何一个人这样调用接口可以拿到value。

0
1
马斯克2048
public ServerResponse checkAnswer(String username,String question,String answer){ int resultCount = userMapper.checkAnswer(username,question,answer); if(resultCount>0){ //说明问题及问题答案是这个用户的,并且是正确的 String forgetToken = UUID.randomUUID().toString(); TokenCache.setKey(TokenCache.TOKEN_PREFIX+username,forgetToken); return ServerResponse.createBySuccess(forgetToken); } return ServerResponse.createByErrorMessage("问题的答案错误"); } 这个方法里先要判断user_name, question, answer的组合是否存在,存在才会走到存储token的代码里,那么user_name为空字符串,question, answer还要符合,这种可能几乎没有啊,如何泄密呢? 如果要泄密,首先得存储进去key=token_的cache键值对。 随后调用forgetResetPassword时,还要判断用户名是否存在。 空字符串用户名,注册的时候,就不让注册,这边就没有泄露token_风险了吧? 假设任何人可以拿到token_的值,那么下一步要重设密码时,也只能update那个空字符串的username的密码,也不可能修改其他人的密码吧? 所以我想问,token_的整个泄露token的流程,以及如何做可以带来危害呢?
2020-06-23
共1条回复

从0开始 独立完成企业级Java电商网站服务端开发

前后端分离,数据库接口设计,架构设计,功能开发,上线运维

9476 学习 · 8804 问题

查看课程