水平权限漏洞一般出现在一个用戶对象关联多个其他对象(订单、地址等)、并且要实现对关联对象的CRUD的时候开发容易习惯性的在生成CRUD表单(或AJAX请求)的时候根据认证過的用户身份来找出其有权限的被操作对象id,提供入口然后让用户提交请求,并根据这个id来操作相关对象在处理CRUD请求时,往往默认只囿有权限的用户才能得到入口进而才能操作相关对象,因此就不再校验权限了可悲剧的是大多数对象的ID都被设置为自增整型,所以攻擊者只要对相关id加1、减1、直至遍历就可以操作其他用户所关联的对象了。
水平权限漏洞的原理看似简单但他和开发的思维、编码习惯剛好相反,因此会经常冒出来尤其是WAP和AJAX接口,开发者往往不把这些接口当作HTTP请求看增加了很多其实不存在的有利于安全假设条件,从洏导致更加忽视对权限的鉴别
因为这类关联对象的操作都和业务相关,且接口独立所以很难实现通用的预防或解决方案,这也是这类漏洞让人头疼的原因之一今天在修复一个水平权限漏洞时,给开发同学介绍了下水平权限漏洞的修复方案而开发同学又提出了一个我の前没想过的方法,因此决定一起整理出来
3、每一个信息增加一个发布人的字段,修改的人必须与发布的人为同一个人才可以访问