橫向越權、縱向越權安全漏洞
阿新 • • 發佈:2018-12-11
1、什麼是橫向越權和縱向越權:
橫向越權:攻擊者嘗試訪問與他擁有相同許可權的使用者的資源
縱向越權:低級別攻擊者嘗試訪問高級別使用者的資源
2、如何解決:
橫向越權場景:
1、在使用者忘記密碼重置密碼時,回答對了問題進入密碼重置階段時,如果知道其他使用者的使用者名稱,很容易改變此使用者的密碼,然後就可以進行越權訪問了。
2、在刪除收貨地址的時候,如果使用者登入了,輸入的是其他使用者的收貨地址id,則把其他的使用者的收貨地址刪了,專案中通過使用者id和收貨地址id兩項才能刪除,防止橫向越權 程式碼如下:
public ServerResponse<String> del(Integer userId,Integer shippingId){ int resultCount = shippingMapper.deleteByShippingIdUserId(userId,shippingId); if(resultCount > 0) return ServerResponse.createBySuccess("刪除地址成功"); return ServerResponse.createByErrorMessage("刪除地址失敗"); }
橫向越權解決: 這種情況下為了防止橫向越權,使用快取來進行輔助,當問題回答正確時,在快取中儲存一對由使用者名稱和一個唯一的數字組成的字串。在重置密碼時我們的引數不僅需要使用者名稱和密碼還需要前面生成的唯一數字符串,根據使用者名稱在快取中取出對應的字串,如果取出的字串和引數中傳入的相等,則可以重置的當前使用者的密碼,否則不是,且不予以重置。
縱向越權解決: 通過設定使用者角色,為不同的角色提供不同的許可權來避免。