内容安全策略
为改善 ThingWorx 客户的安全状况,从 ThingWorx 9.3.15、9.4.5 和 9.5.1 开始,ThingWorx Platform 添加了内容安全策略 (CSP)。
CSP
CSP 是供 Web 浏览器使用的关键安全工具,有助于防止跨站脚本攻击 (XSS)、点击劫持和其他数据注入攻击。CSP 的工作原理是:将 CSP 标头从 ThingWorx Platform 插入 Web 浏览器,以控制浏览器可加载哪些动态数据和资源以及从哪些域中加载。来自允许域以外的资源请求无法加载到浏览器中。
受控资源的示例包括:
加载字体、图像和 JavaScript 库
在 ThingWorx 混搭的 iFrame 中呈现来自外部源的内容
在外部页面的 iFrame 中呈现 ThingWorx 页面内容,例如在 Windchill 页面中呈现 ThingWorx 混搭
管理员通过 ThingWorx Composer 配置 CSP 指令。构成 CSP 策略的 CSP 标头是所有指令的组合。CSP 标头不得超过 1200 个字符。
ThingWorx 已实施内容安全策略级别 2。有关 CSP 的详细信息,请参阅以下内容:
Composer
主页横幅
为提醒管理员注意这一新的安全功能并在该功能未启用时对他们发出警告,ThingWorx Composer 将在 Composer 的顶部显示非阻塞式警告横幅“内容安全策略 (CSP) 未启用。有关详细信息,请参阅帮助中心。”
此横幅仅在未启用 CSP 的情况下显示,且仅针对管理员显示。管理员可消除警告,使其在以后的登录中不再出现。其他管理员在消除警告前仍会收到此横幅。横幅包括指向内容安全策略主题的帮助中心链接。
配置 CSP
管理员将通过平台子系统上的内容安全策略规则子页面配置 CSP。在此页面上,管理员可添加和修改定义策略的指令。有关详细信息,请参阅配置内容安全策略标头值
启用 CSP
可通过在 platform-settings.json 中设置新参数来启用 CSP:“EnableContentSecurityPolicyFilter”: true
如果 "EnableContentSecurityPolicyFilter" 设置为 true,则启用 CSP 保护。如果 "EnableContentSecurityPolicyFilter" 设置为 false 或未包括在 platform-settings.json 中,则禁用 CSP。
有关安装和升级的说明,请参阅帮助中心的安装和升级部分。
支持 CSP 筛选器的新 ThingWorx Platform 安装
手动安装
ThingWorx Foundation 安装程序
将 ThingWorx 升级至支持 CSP 的版本
有关维护版的升级,请参阅维护版升级
有关 Windows 手动升级的信息,请参阅以下内容:
有关 Linux 手动升级的信息,请参阅以下内容:
有关 ThingWorx Foundation 安装程序升级的信息,请参阅安装程序升级
在现有环境中启用或禁用 CSP
要在现有环境中启用或禁用 CSP,请执行以下步骤:
1. platform-settings.json 文件 PlatformSettingsConfig 下 BasicSettings 部分中的 EnableContentSecurityPolicyFilter 标志设置为 True
2. 重新启动 Tomcat 服务器。
* 
如果满足以下所有条件,ThingWorx 启动时,web.xml 的 ClickjackFilter 配置会自动迁移至 CSP:
CSP 筛选器已打开。
已在 web.xml 中配置点击劫持筛选器。
ThingWorx 管理员尚未在 ThingWorx Composer 中配置 CSP 筛选器。
将 ClickjackFilter 设置迁移到 CSP
如果满足以下条件,ThingWorx 启动时,ClickjackFilter 配置会自动迁移至 CSP:
内容安全策略筛选器已打开,这意味着 EnableContentSecurityPolicyFilter 已设置为 true
已使用 web.xml 配置点击劫持筛选器。
尚未从 UI 中配置 CSP 筛选器。
可通过以下三种模式之一配置 ClickjackFilter:SAMEORIGINDENYALLOWLIST
如果将 ClickjackFilter 配置为 SAMEORIGIN,则不会迁移任何内容,因为这是 frame-ancestors 的 CSP 默认配置。
<filter>
<filter-name>ClickjackFilterSameOrigin</filter-name>
<filter-class>com.thingworx.security.filter.ClickjackFilter</filter-class>
<init-param>
<param-name>mode</param-name>
<param-value>SAMEORIGIN</param-value>
</init-param>
</filter>

<filter-mapping>
<filter-name>ClickjackFilterSameOrigin</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
如果将 ClickjackFilter 配置为 DENY,则 CSP 标头 frame-ancestors 将被配置为 'none'
<filter>
<filter-name>ClickjackFilterDeny</filter-name>
<filter-class>com.thingworx.security.filter.ClickjackFilter</filter-class>
<init-param>
<param-name>mode</param-name>
<param-value>DENY</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>ClickjackFilterDeny</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
如果 ClickjackFilter 已配置为 ALLOWLIST,则 CSP 标头 frame-ancestorsframe-src 将被配置为允许已配置的域。
<filter>
<filter-name>ClickjackFilterAllowList</filter-name>
<filter-class>com.thingworx.security.filter.ClickjackFilter</filter-class>
<init-param>
<param-name>mode</param-name>
<param-value>ALLOWLIST</param-value>
</init-param>
<init-param>
<param-name>domains</param-name>
<param-value>http://example.com</param-value>
</init-param>
</filter>
<filter>
<filter-mapping>
<filter-name>ClickjackFilterAllowList</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
这对您有帮助吗?