水平越权检测,返回的结果多种多样,这就给判断越权带来很大困难。当前的解决方案是
,确定接口的不同行为,然后采取不同的策略以提高准确性。采用规则设置和算法优化,使界
面越界判断的准确率由仅比较返回一致性70%提高到90%。
行为识别的主要目的是确定界面的操作方式,每一操作都可以通过相应的算法来判断。现有的
简易检查算法分为读和写两类,每种类型都有独立的检查算法。后端可扩展到更细粒度的操作
,如查询、更新、删除、导出等,提供更精确的检查方法。目前,对接口行为的识别是根据接
口名来判断的。
简易检查算法分为读和写两类,每种类型都有独立的检查算法。后端可扩展到更细粒度的操作
,如查询、更新、删除、导出等,提供更精确的检查方法。目前,对接口行为的识别是根据接
口名来判断的。
例如,一个名为youzan.retail.finance.settlement.item.list.1.0.0的接口,那么item通常会识别
操作的对象,而list则会识别行为,因此可以从接口名大致推断该接口的作用。因此,可以为
关键字建立词典,根据字段名称,匹配出属于哪个行为。但有一部分接口并没有完全遵循这
条规则,比如将行为命名为前,对象为后,或者行为的名字不是query,而是queryStatus,
它就像query一样。因此,匹配时根据匹配的程度来评分,所有匹配时得分较高,部分匹配
时得分较低,最后根据接口名中的字段和分数来判断是属于读接口还是写接口。对于读取请
求的级别越权判断,一般的算法就是比较两个请求的返回结果是否一致,如果是一致的,就
说明有级别越权,大多数情况下可以通过这条规则来发现问题。
操作的对象,而list则会识别行为,因此可以从接口名大致推断该接口的作用。因此,可以为
关键字建立词典,根据字段名称,匹配出属于哪个行为。但有一部分接口并没有完全遵循这
条规则,比如将行为命名为前,对象为后,或者行为的名字不是query,而是queryStatus,
它就像query一样。因此,匹配时根据匹配的程度来评分,所有匹配时得分较高,部分匹配
时得分较低,最后根据接口名中的字段和分数来判断是属于读接口还是写接口。对于读取请
求的级别越权判断,一般的算法就是比较两个请求的返回结果是否一致,如果是一致的,就
说明有级别越权,大多数情况下可以通过这条规则来发现问题。
基于这一点,还有许多特殊的情形,例如,有权限返回和越权返回的对象都是空列表或缺省
值,结果双方返回的信息是一致的,这样就不能判断是否越权,而需要通过识别无意义的返
回或非敏感信息的返回来判断是否越权,直到出现新的有意义的返回来帮助判断界面确实是
越权/不越权的。因此,目标明确地增加了检查规则,即返回值是空列表,还是全部为默认值
0[]"等等。如果返回的信息为空或非敏感信息,则会根据规则判断下列返回结果是否存在越
权风险:
值,结果双方返回的信息是一致的,这样就不能判断是否越权,而需要通过识别无意义的返
回或非敏感信息的返回来判断是否越权,直到出现新的有意义的返回来帮助判断界面确实是
越权/不越权的。因此,目标明确地增加了检查规则,即返回值是空列表,还是全部为默认值
0[]"等等。如果返回的信息为空或非敏感信息,则会根据规则判断下列返回结果是否存在越
权风险: