水平許可權漏洞是指web應用程式接收到使用者請求時,沒有判斷資料的所屬人,或者在判斷資料所屬人時是從使用者提交的引數中獲取了userid,導致攻擊者可以自行修改userid修改不屬於自己的資料。
漏洞示例:
***/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 owneri
d=#userid#來代替,要求web層在呼叫資料介面層的介面時額外提供userid,而這個userid在web層看來通常只能通過seesion來取到,以防使用者造假。但這個方案的缺陷在於實現起來要改動底層的設計,所以不適合作為修復方案,更適合作為在最開始設計時的統一控制方案。 2、
最直接有效的修復方案:在web層的邏輯中做鑑權,檢查提交crud請求的操作者(通過session或token等加密資訊中得到,以防造假)與目標物件的許可權所有者是否一致,如果不一致則阻斷。這個方案實現成本低、能確保漏洞的修復質量,缺點是增加了一次查庫操作。我之前一直用這種方案來對已發生的水平許可權漏洞做緊急修復。
另外的方法:
1、可對id加密
2、使用uuid
3、每乙個資訊增加乙個發布人的字段,修改的人必須與發布的人為同乙個人才可以訪問
垂直許可權漏洞是指web應用沒有做許可權控制,或僅僅在選單上做了許可權控制,導致惡意使用者只要猜到了其他頁面的url,就可以訪問或控制其他角色擁有的資料或頁面,達到許可權提公升的目的。
修復方案:
只需要對url資源進行許可權驗證即可。
水平許可權漏洞的修復方案
原文 水平許可權漏洞一般出現在乙個使用者物件關聯多個其他物件 訂單 位址等 並且要實現對關聯物件的crud的時候。開發容易習慣性的在生成crud表單 或ajax請求 的時候根據認證過的使用者身份來找出其有許可權的被操作物件id,提供入口,然後讓使用者提交請求,並根據這個id來操作相關物件。在處理cr...
KDE Frameworks許可權提公升漏洞
影響產品 kde frameworks cve id cve 2016 3100 漏洞描述 kde frameworks是kde社群的開發的乙個kde應用程式的技術基礎庫和軟體框架的集合。kinit是其中的乙個用來獲取和快取kerberos票據的命令列工具。kde frameworks 5.23.0...
PHPDrive許可權提公升漏洞及修復
phpdrive 是一套執行於 php 環境的檔案管理系統,可以應用於網盤 企業檔案管理 學校 團隊管理 軟體站 檔案cms等 includes user.lib.php 行87 function get ip 在使用者註冊與登入 處module disk account.lead.php 198行...