JASIG CAS CORS 当 Origin == "null" 时会发生啥?

Posted

技术标签:

【中文标题】JASIG CAS CORS 当 Origin == "null" 时会发生啥?【英文标题】:JASIG CAS CORS what should happen when Origin == "null"?JASIG CAS CORS 当 Origin == "null" 时会发生什么? 【发布时间】:2016-09-05 05:33:42 【问题描述】:

我正在使用 CAS 服务器来保护我的 Spring 应用程序,其中包括 REST 和 HttpInvoker API。

当应用程序重定向到不同域中的 CAS 服务器时,我们会得到 CORS '问题'。我已将 eBay Cors-Filter https://github.com/eBay/cors-filter 添加到应用程序和 CAS 服务器。

不过……

当应用程序重定向到 CAS 服务器进行身份验证时,Origin 标头更改为“null”。这是由于 CORS 规范(第 14 页,第 7.3 节)中提到的“隐私敏感”上下文。

...而且,现在终于...问题了!

如果服务器收到 'null' 的 Origin 标头,它是否可以正常进行,只在 Access-Control-Allow-Origin 标头中返回 'null'?

这会破坏什么吗?

不安全吗?

干杯

【问题讨论】:

【参考方案1】:

允许null 起源不安全的。 This blog post 很好地分解了原因。简短的版本是,它启用了一种 CSRF 形式。 null 的允许来源意味着“任何重定向到我的页面”(或从 file:/// URL 运行的任何代码,但这是另一个主题)。

假设您在app.example.com 上的应用使用service.example.com 上的服务,并在auth.example.com 上受CAS 保护。此外,假设您使用Access-Control-Allow-Origin: null 设置service,以便您可以从指向authapp 获取并重定向到service。明白了吗?好的,你获取auth.example.com/cas/login?service=service.example.com,登录发生(auth.example.com 上设置的会话 cookie),重定向发生(service.example.com 上设置的会话 cookie),appservice 获取数据。由于您的 Access-Control 标头,浏览器允许您的应用读取响应。

现在,假设您访问了一个知道您的服务的恶意页面 (evil.com/hello)。他们在evil.com/redir 上运行一个指向service.example.com 的302 页面。现在,这个恶意代码可以使用credentials="include" 获取evil.com/redir。浏览器将请求重定向页面,获得一个302,其中 ACA-Origin=https://evil.com 和 ACA-Credentials=true,Locationservice.example.com。浏览器跟随 302,请求 service.example.com 并包含相关的会话 cookie。在此请求中,Origin 设置为 null,但您已将该值列入白名单,因此您的服务会发送一个 ACA-Origin 值 null,并且浏览器允许(恶意)请求代码查看响应。您刚刚将经过身份验证的数据从您的服务泄漏到注入的脚本中,这可以将其发送给攻击者。

【讨论】:

【参考方案2】:

是的,我相信您可以返回 null 或通配符 * 以允许任何来源。

这会破坏什么吗?

如果您只在收到Origin: null 时返回null,那么它应该不会影响其他任何事情。

不安全吗?

我不熟悉 CAS,但是只要您不发送Access-Control-Allow-Credentials,并且您的 CAS 不受 IP 限制或仅在本地网络上,那么这不会打开您的系统与匿名访问一样。有关技术详情,请参阅this answer。

如果是,那么设置 Access-Control-Allow-Origin 将允许其他域和来源从用户访问的 CORS 中读取数据,使用他们的 CAS cookie。

【讨论】:

以上是关于JASIG CAS CORS 当 Origin == "null" 时会发生啥?的主要内容,如果未能解决你的问题,请参考以下文章

安装部署jasig cas server及相关实践

安装部署jasig cas server及相关实践

如何使用 Spring MVC & Security、Jasig CAS 和 JSP 视图在 Spring Boot 2 中配置 UTF-8?

CasFilterConfig.java

单点登录CAS使用记:部署CAS服务器以及客户端

当资源缺少 access-control-allow-origin 标头时传递 CORS [重复]