參考:http://blog.csdn.net/github_39104978/article/details/78265433
看了上面的文章,對越權操作的概念還是比較模糊,不明確實際場景。
橫向越權的情況:
用戶登錄模塊中,假設用戶在忘記密碼(未登錄)時,想要重置密碼。假設接口設計為傳參只用傳用戶名和新的密碼。
localhost:8080/user/forget_reset_password.do?username=aaa&passwordNew=xxx
用戶先通過密碼提示問題並回答問題成功后,跳轉到重置密碼的頁面。該頁面下攻擊者在瀏覽器中查看到重置密碼的接口后,可以輸入任意用戶名和密碼后提交,如果輸入的用戶名存在的話就會導致別的用戶被修改了密碼!同樣是普通用戶的權限,修改了其他普通用戶的信息,這種功能情況即是橫向越權。
為了避免以上橫向越權的行為,常用辦法是在用戶回答密碼提示問題正確后,服務端隨機生成一個Token值返回,並給Token設置過期時間(如30分鍾),然后重置密碼的接口中要求前端傳遞該Token,即可確保是當前用戶修改自己的密碼了。
重置密碼的接口改為
localhost:8080/user/forget_reset_password.do?username=aaa&passwordNew=xxx&forgetToken=531ef4b4-9663-4e6d-9a20-fb56367446a5