權限漏洞:水平權限漏洞、垂直權限漏洞

水平權限漏洞是指Web應用程序接收到用戶請求時,沒有判斷數據的所屬人,或者在判斷數據所屬人時是從用戶提交的參數中獲取了userid,導致攻擊者可以自行修改userid修改不屬於自己的數據。

漏洞示例:

XXX/getAddress?id=1

如上,攻擊者修改addressId即可得到他人的address信息。開發容易習慣性的在生成CRUD(增查改刪)表單(或AJAX請求)的時候根據認證過的用戶身份來找出其有權限的被操作對象的id來提供入口,然後讓用戶提交請求,並根據這個id來操作相關對象。在處理CRUD請求時,都天真地默認只有有權限的用戶才知道這個入口,進而才能操作相關對象,因此就不再校驗權限了。可悲劇的是大多數對象的ID都被設置爲自增整型,所以攻擊者只要對相關id加1、減1、直至遍歷,就可以操作其他用戶所關聯的對象了。

修復方案:

1、最正規的方案:把權限的控制轉移到數據接口層中,避免出現select/update/delete ... where addressID=#addressID#的SQL語句,使用select/update/delete... where addressID=#addressID# and ownerId=#userId#來代替,要求web層在調用數據接口層的接口時額外提供userid,而這個userid在web層看來通常只能通過seesion來取到,以防用戶造假。但這個方案的缺陷在於實現起來要改動底層的設計,所以不適合作爲修復方案,更適合作爲在最開始設計時的統一控制方案。

2、最直接有效的修復方案:在web層的邏輯中做鑑權,檢查提交CRUD請求的操作者(通過session或token等加密信息中得到,以防造假)與目標對象的權限所有者是否一致,如果不一致則阻斷。這個方案實現成本低、能確保漏洞的修復質量,缺點是增加了一次查庫操作。我之前一直用這種方案來對已發生的水平權限漏洞做緊急修復。

另外的方法:

1、可對ID加密

2、使用UUID

3、每一個信息增加一個發佈人的字段,修改的人必須與發佈的人爲同一個人纔可以訪問

 

垂直權限漏洞是指Web應用沒有做權限控制,或僅僅在菜單上做了權限控制,導致惡意用戶只要猜到了其他頁面的URL,就可以訪問或控制其他角色擁有的數據或頁面,達到權限提升的目的。

修復方案:

只需要對url資源進行權限驗證即可。
————————————————
版權聲明:本文爲CSDN博主「yjclsx」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/yjclsx/article/details/80923458

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章