我已经为几个网站设置了一个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文件,那个遗留的网站:
{
"@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帧选项,只有该遗留网站?
谢谢
发布于 2019-11-25 09:40:45
我已经为您查看了代码,请参阅这两个确定X-Frame-Options是否有效的位置:
将两个源合并在一起并进行一些解释,我们得到如下结果:
是否启用/禁用X-Frame-Options的逻辑
@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选项的结果:
如果我们制作一个表格,显示设置上述2个值将如何影响显示XFrameOptions的最终结果:
+--------------------------------+-------------------------------------------+---------------------+
| enableXFrameOptions property | httpHeaderEnableXFrameOptions in service | Is XFrame Enabled? |
+--------------------------------------------------------------------------------------------------+
| true | true | true |
+--------------------------------------------------------------------------------------------------+
| false | true | true |
+--------------------------------------------------------------------------------------------------+
| true | false | *true* |
+--------------------------------------------------------------------------------------------------+
| false | false | false |
+--------------------------------+-------------------------------------------+---------------------+这就是为什么在你的情况下,当你设置:
结果仍然是真,因此您在结果中看到了什么。
解决方案
一个愚蠢的解决方案(未经过测试)是将cas.httpWebRequest.header.xframe设置为false,并确保所有服务都标记为httpHeaderEnableXFrameOptions = true expect (当然是旧式网站)。
另一个解决方案是对CAS进行自定义更改,以修改此行为。
或者可能还有其他解决方案,如果是这样的话,其他解决方案可能会有所帮助:)
https://stackoverflow.com/questions/59008942
复制相似问题