首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CAS禁用服务X-帧选项无效

CAS禁用服务X-帧选项无效
EN

Stack Overflow用户
提问于 2019-11-23 14:58:54
回答 1查看 898关注 0票数 1

我已经为几个网站设置了一个CAS服务器作为SSO解决方案。

我使用JSON文件作为服务注册中心。然而,我想禁用其中一个网站的X帧选项,因为它是一个传统网站使用iframe嵌入一些模块。出于安全考虑,我不想在其他网站中禁用X帧选项。

我成功地为那些网站设置了CAS,但是,我不能禁用该特定遗留网站的X帧选项。

CAS版本为5.3,我在这里使用CAS官方网站中提到的配置:

https://apereo.github.io/cas/5.3.x/installation/Configuring-Service-Http-Security-Headers.html

这是我的JSON文件,那个遗留的网站:

代码语言:javascript
复制
{
  "@class": "org.apereo.cas.services.RegexRegisteredService",
  "serviceId": "^https://my-internal-site.com.*",
  "name": "mysite",
  "id": 1001,
  "evaluationOrder": 5,
  "attributeReleasePolicy": {
    "@class": "org.apereo.cas.services.ReturnMappedAttributeReleasePolicy",
    "authorizedToReleaseProxyGrantingTicket": true,
    "allowedAttributes": {
      "@class": "java.util.TreeMap",
      "username": "username",
      "personUuid": "personUuid"
    }
  },
  "proxyPolicy": {
    "@class": "org.apereo.cas.services.RegexMatchingRegisteredServiceProxyPolicy",
    "pattern": "^https://.+"
  },
  "properties" : {
    "@class" : "java.util.HashMap",
    "httpHeaderEnableXFrameOptions" : {
      "@class" : "org.apereo.cas.services.DefaultRegisteredServiceProperty",
      "values" : [ "java.util.HashSet", [ "false" ] ]
    }
  }
}

我试图通过CAS仪表板查看配置,发现CAS已经识别了我的配置,我可以在"mysite“中看到httpHeaderEnableXFrameOptions的配置。

但是,我仍然不能禁用我的遗留网站(mysite)的X框架选项。

我的配置有什么问题吗?或者,是否有任何其他配置,我需要设置,以禁用X帧选项,只有该遗留网站?

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-11-25 09:40:45

我已经为您查看了代码,请参阅这两个确定X-Frame-Options是否有效的位置:

将两个源合并在一起并进行一些解释,我们得到如下结果:

是否启用/禁用X-Frame-Options的逻辑

代码语言:javascript
复制
    @Override
    protected void decideInsertXFrameOptionsHeader(final HttpServletResponse httpServletResponse, final HttpServletRequest httpServletRequest) {
        // Check A
        if (shouldHttpHeaderBeInjectedIntoResponse(httpServletRequest,
            RegisteredServiceProperties.HTTP_HEADER_ENABLE_XFRAME_OPTIONS)) {
            final String xFrameOptions = getStringProperty(httpServletRequest, RegisteredServiceProperties.HTTP_HEADER_XFRAME_OPTIONS);
            super.insertXFrameOptionsHeader(httpServletResponse, httpServletRequest, xFrameOptions);
        } else {
             // Check B
             if (!this.enableXFrameOptions) {
                 return;
             }
             insertXFrameOptionsHeader(httpServletResponse, httpServletRequest);
        }
    }

分析逻辑

有两种方法可以影响是否启用xframe选项的结果:

  1. this.enableXFrameOptions,,即cas.httpWebRequest.header.xframe in 这里
  2. 服务中的httpHeaderEnableXFrameOptions in ,它已经在问题中链接了

如果我们制作一个表格,显示设置上述2个值将如何影响显示XFrameOptions的最终结果:

代码语言:javascript
复制
+--------------------------------+-------------------------------------------+---------------------+
|  enableXFrameOptions property  |  httpHeaderEnableXFrameOptions in service |  Is XFrame Enabled? |
+--------------------------------------------------------------------------------------------------+
|         true                   |                 true                      |        true         |
+--------------------------------------------------------------------------------------------------+
|         false                  |                 true                      |        true         |
+--------------------------------------------------------------------------------------------------+
|         true                   |                 false                     |       *true*        |
+--------------------------------------------------------------------------------------------------+
|         false                  |                 false                     |        false        |
+--------------------------------+-------------------------------------------+---------------------+

这就是为什么在你的情况下,当你设置:

  1. this.enableXFrameOptions = true (默认情况下)
  2. httpHeaderEnableXFrameOptions in service = false

结果仍然是,因此您在结果中看到了什么。

解决方案

一个愚蠢的解决方案(未经过测试)是将cas.httpWebRequest.header.xframe设置为false,并确保所有服务都标记为httpHeaderEnableXFrameOptions = true expect (当然是旧式网站)。

另一个解决方案是对CAS进行自定义更改,以修改此行为。

或者可能还有其他解决方案,如果是这样的话,其他解决方案可能会有所帮助:)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59008942

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档