内容安全策略

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”

充当其他拉取指令的后备指令。

default_src 的有效值(链接在新窗口中打开)

content_security_policy.directive.connect_src*

限制可使用脚本接口加载的 URL。

connect_src 的有效值(链接在新窗口中打开)

content_security_policy.directive.script_src*

指定 JavaScript 的有效来源。

script_src 的有效值(链接在新窗口中打开)

content_security_policy.directive.style_src*“unsafe-inline”

指定样式表的有效来源。

style_src 的有效值(链接在新窗口中打开)

content_security_policy.directive.img_src* 数据:

指定图像和网站图标的有效来源。

img_src 的有效值(链接在新窗口中打开)

content_security_policy.directive.font_src* 数据:

指定使用 @font-face 加载的字体的有效来源。

font_src 的有效值(链接在新窗口中打开)

content_security_policy.directive.frame_src* 数据:

指定使用诸如 <frame> 和 <iframe> 等元素加载的嵌套浏览上下文的有效来源。

frame_src 的有效值(链接在新窗口中打开)

content_security_policy.directive.object_src数据:

指定 <object>、<embed> 和 <applet> 元素的有效来源。

object_src 的有效值(链接在新窗口中打开)

content_security_policy.directive.report_uri/vizql/csp-report

指示用户代理报告尝试违反 CSP 的次数。这些违例报告由通过 HTTP POST 请求发送到指定 URI 的 JSON 文档组成。

report_uri 的有效值(链接在新窗口中打开)

步骤 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_enabledfalse

向所有请求中添加 CSP 标头,以便浏览器将实施任何违例。

content_security_policy.report_only_enabledtrue向所有请求中添加 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 浏览器。

  1. 加载一个包含违例情况的测试可视化项,该可视化项托管在您在其中配置了 CSP 的 Tableau Server 部署上。

  2. 输入 CTRL+Shift+I,在 Chrome 中打开开发者工具。

  3. 单击“Network”(网络)选项卡。

  4. 在“Filter”(筛选器)字段中,输入 csp-report,然后单击“Find All”(查找全部)。

    • 如果没有违例,搜索将不会返回任何 CSP 报告。

    • 如果有违例,请单击结果窗格的“Headers”(标题)选项卡,并滚动到底部来查看“Request Payload”(请求有效负载)。

感谢您的反馈!您的反馈已成功提交。谢谢!