参考:http://blog.csdn.net/github_39104978/article/details/78265433前端
看了上面的文章,对越权操做的概念仍是比较模糊,不明确实际场景。git
用户登陆模块中,假设用户在忘记密码(未登陆)时,想要重置密码。假设接口设计为传参只用传用户名和新的密码。github
localhost:8080/user/forget_reset_password.do?username=aaa&passwordNew=xxx
用户先经过密码提示问题并回答问题成功后,跳转到重置密码的页面。该页面下攻击者在浏览器中查看到重置密码的接口后,能够输入任意用户名和密码后提交,若是输入的用户名存在的话就会致使别的用户被修改了密码!一样是普通用户的权限,修改了其余普通用户的信息,这种功能状况便是横向越权。浏览器
为了不以上横向越权的行为,经常使用办法是在用户回答密码提示问题正确后,服务端随机生成一个Token值返回,并给Token设置过时时间(如30分钟),而后重置密码的接口中要求前端传递该Token,便可确保是当前用户修改本身的密码了。spa
重置密码的接口改成.net
localhost:8080/user/forget_reset_password.do?username=aaa&passwordNew=xxx&forgetToken=531ef4b4-9663-4e6d-9a20-fb56367446a5