内容安全策略
Tableau Server 支持内容安全策略 (CSP) 标准。CSP 旨在为抵御跨站点脚本攻击和其他基于 Web 的恶意攻击提供一层额外的安全保护。CSP 以 HTTP 响应头的形式实现,它允许您指定可从何处安全地加载诸如脚本和图像等外部资源。
有关 CSP 的详细信息,请参见 Mozilla 网站(链接在新窗口中打开)。
配置和启用 CSP
使用 tsm configuration set 选项 命令来配置和启用 CSP。如果在分布式部署中运行 Tableau Server,请在群集中的初始节点上运行这些命令。配置将在您运行 tsm pending-changes apply 之后在整个群集中应用。
步骤 1:设置默认指令
Tableau Server 包括下表中的一组默认指令。
若要设置指令,请使用以下 tsm 语法:
tsm configuration set -k content_security_policy.directive.<directive_name> -v "<value>"
例如,若要设置 connect_src
指令,请运行以下命令:
tsm configuration set -k content_security_policy.directive.connect_src -v "* unsafe-inline"
选项 | 默认值 | 描述 |
---|---|---|
content_security_policy.directive.default_src | “none” | 充当其他拉取指令的后备指令。 |
content_security_policy.directive.connect_src | * | 限制可使用脚本接口加载的 URL。 |
content_security_policy.directive.script_src | * | 指定 JavaScript 的有效来源。 |
content_security_policy.directive.style_src | *“unsafe-inline” | 指定样式表的有效来源。 |
content_security_policy.directive.img_src | * 数据: | 指定图像和网站图标的有效来源。 |
content_security_policy.directive.font_src | * 数据: | 指定使用 @font-face 加载的字体的有效来源。 |
content_security_policy.directive.frame_src | * 数据: | 指定使用诸如 <frame> 和 <iframe> 等元素加载的嵌套浏览上下文的有效来源。 |
content_security_policy.directive.object_src | 数据: | 指定 <object>、<embed> 和 <applet> 元素的有效来源。 |
content_security_policy.directive.report_uri | /vizql/csp-report | 指示用户代理报告尝试违反 CSP 的次数。这些违例报告由通过 HTTP POST 请求发送到指定 URI 的 JSON 文档组成。 |
步骤 2:添加其他指令(可选)
Tableau Server 附带的默认指令是 CSP 支持的指令的子集。
有关支持的 CSP 指令的完整列表,请转到 https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Headers/Content-Security-Policy(链接在新窗口中打开)。
通过在 content_security_policy.directive 命名空间中添加新指令,您可以向现有默认指令集中添加指令。添加新指令时,您必须包括 --force-keys
参数。语法如下:
tsm configuration set -k content_security_policy.directive.<new_directive_name> -v "<value>" --force-keys
例如,若要添加 worker-src
(链接在新窗口中打开) 指令,请运行以下命令:
tsm configuration set -k content_security_policy.directive.worker-src -v "none" --force-keys
步骤 3:指定仅报告的指令(可选)
您可以将 CPS 配置为报告某些指令和执行其他指令。将 content_security_policy.enforce_enabled 设置为 true 时,则执行所有指令(即使 content_security_policy.report_only_enable 也设置为 true)。
若要将指令指定为“仅报告”而不执行,请将指令添加到 report_only_directive 命名空间。添加新指令时,您必须包括 --force-keys
参数。语法如下:
tsm configuration set -k content_security_policy.report_only_directive.<directive_name> -v "<value>" --force-keys
例如,若要仅报告 script_src
指令,请运行以下命令:
tsm configuration set -k content_security_policy.report_only_directive.script_src -v " http://*.example.com" --force-keys
步骤 4:在 Tableau Server 上启用 CSP
配置了指令之后,在 Tableau Server 上启用 CSP。
以下选项用于为您设置的指令启用执行或仅报告模式。
选项 | 默认值 | 描述 |
---|---|---|
content_security_policy.enforce_enabled | false | 向所有请求中添加 CSP 标头,以便浏览器将实施任何违例。 |
content_security_policy.report_only_enabled | true | 向所有请求中添加 CSP 标头,以便在 vizql-client 日志中记录任何违例,但浏览器不实施这些违例。 |
若要执行您已指定的 CSP 指令,请运行以下命令
tsm configuration set -k content_security_policy.enforce_enabled -v true
步骤 5:运行 tsm pending-changes apply
配置完 CSP 后,运行 tsm pending-changes apply。
如果待定更改需要重新启动服务器,pending-changes apply
命令将显示一个提示,告知您将进行重新启动。即使服务器已停止,此提示也会显示,但在这种情况下不会重新启动。您可以使用 --ignore-prompt
选项隐藏提示,但这样做不会改变重新启动行为。如果更改不需要重新启动,则会在不提示的情况下应用更改。有关详细信息,请参见tsm pending-changes apply。
查看 CSP 报告
若要查看给定可视化项的 CSP 违例,请在包括开发者工具的浏览器中加载该可视化项。此示例使用 Chrome 浏览器。
加载一个包含违例情况的测试可视化项,该可视化项托管在您在其中配置了 CSP 的 Tableau Server 部署上。
输入
CTRL+Shift+I
,在 Chrome 中打开开发者工具。单击“Network”(网络)选项卡。
在“Filter”(筛选器)字段中,输入
csp-report
,然后单击“Find All”(查找全部)。如果没有违例,搜索将不会返回任何 CSP 报告。
如果有违例,请单击结果窗格的“Headers”(标题)选项卡,并滚动到底部来查看“Request Payload”(请求有效负载)。