橫向越權與縱向越權
橫向越權:橫向越權指的是攻擊者嘗試訪問與他擁有相同權限的用戶的資源
縱向越權:縱向越權指的是一個低級別攻擊者嘗試訪問高級別用戶的資源
如何防止橫向越權漏洞:
可通過建立用戶和可操作資源的綁定關系,用戶對任何資源進行操作時,通過該綁定關系確保該資源是屬於該用戶所有的。
對請求中的關鍵參數進行間接映射,避免使用原始關鍵參數名,比如使用索引1代替id值123等
如何防止縱向越權漏洞:
建議使用基於角色訪問控制機制來防止縱向越權攻擊,即預先定義不同的權限角色,為每個角色分配不同的權限,每個用戶都屬於特定的角色,即擁有固定的權限,當用戶執行某個動作或產生某種行為時,通過用戶所在的角色判定該動作或者行為是否允許。
水平權限問題
攻擊者可以根據接口參數中的id加1等操作,來獲取其他用戶的權限或數據。
解決方法
- 水平權限參數不要用自增值,用id加密、隨機數或GUID,但搜索引擎或攻擊者可以同樣用這個隨機數和連接去進行操作
- web層檢查發起請求的用戶權限,比如從session信息中獲取
- 數據庫表增加ownerId字段,增刪改查詢時加上其作為where語句條件(即每一個信息增加一個發布人的字段,修改的人必須與發布的人為同一個人才可以訪問)
垂直權限漏洞是指Web應用沒有做權限控制,或僅僅在菜單上做了權限控制,導致惡意用戶只要猜到了其他頁面的URL,就可以訪問或控制其他角色擁有的數據或頁面,達到權限提升的目的。
修復方案:
只需要對url資源進行權限驗證即可。