Open xiejuntao opened 5 months ago
version:1.8.6,have already solved.
version:1.8.7 There is also this bug.
这部分代码看起来当初是 bydesign 的,不过从当前的需求出发,感觉为这个规则增加一个严格模式,在严格模式下没有设置 orgin 的客户端请求会被拒绝,默认模式下保持原有行为,这样会不会更合适一些,欢迎加入讨论或提交优化的 PR。 PS:我们考虑在 2.0 中和安全能力一起重构这部分功能。
一、详细说明: 使用来源白名单功能时,没有设置orgin的客户端请求会立即通过,功能失效。 二、漏洞证明(在这里写POC): github上最新的代码: https://github.com/alibaba/Sentinel/blob/master/sentinel-core/src/main/java/com/alibaba/csp/sentinel/slots/block/authority/AuthorityRuleChecker.java 三、修复方案: 应去掉StringUtil.isEmpty(requester)的判断,否则白名单功能失效,产生非法访问的漏洞。
一个解决方案是:在实现 RequestOriginParser#parseOrigin 方法是默认返回一个来源(如:defaultOrigin),而不是返回为空字符串。
当然直接放行 origin 为空的请求感觉确实有点怪怪的。
一、详细说明: 使用来源白名单功能时,没有设置orgin的客户端请求会立即通过,功能失效。 二、漏洞证明(在这里写POC): github上最新的代码: https://github.com/alibaba/Sentinel/blob/master/sentinel-core/src/main/java/com/alibaba/csp/sentinel/slots/block/authority/AuthorityRuleChecker.java 三、修复方案: 应去掉StringUtil.isEmpty(requester)的判断,否则白名单功能失效,产生非法访问的漏洞。