为 frame ancestors 配置 CSP 规则
内容安全策略(Content Security Policy,CSP)是一种旨在防止跨站脚本(XSS)、点击劫持(clickjacking)以及其他由恶意内容注入可信网页上下文引发的攻击的安全标准。
UDB-SX Dashboards 支持在 udbsx_dashboards.yml 文件中通过 csp.rules 键配置 CSP 规则。
修改 YAML 文件后需要重启服务器,这可能会影响服务可用性。
不过,你可以通过 applicationConfig 插件动态配置 CSP 规则中的 frame-ancestors 指令,而无需重启服务器。
其他指令的支持将根据安全风险进行评估。
配置
applicationConfig 插件提供读写 API,允许 UDB-SX Dashboards 用户以键值对的形式在索引中管理动态配置。
cspHandler 插件会向 HttpServiceSetup 注册一个预响应处理程序,该处理程序从依赖的 applicationConfig 插件中获取 frame-ancestors 值,然后将其写入 CSP 响应头。
要使用此功能,需要在 udbsx_dashboards.yml 文件中启用这两个插件。
配置示例如下:
application_config.enabled: true
csp_handler.enabled: true
启用 UDB-SX Dashboards 的站点嵌入
要为 UDB-SX Dashboards 启用站点嵌入,可使用 cURL 更新 CSP 规则中的 frame-ancestors 指令。
当在 cURL 命令中使用单引号包含 data-raw 参数时,请使用反斜杠(\)进行转义,例如使用 '\'' 表示 '。
配置示例如下:
curl '{osd endpoint}/api/appconfig/csp.rules.frame-ancestors' \
-X POST \
-H 'Accept: application/json' \
-H 'Content-Type: application/json' \
-H 'osd-xsrf: osd-fetch' \
-H 'Sec-Fetch-Dest: empty' \
--data-raw '{"newValue":"{new site}"}'
删除 CSP 规则中的 frame-ancestors
使用以下 cURL 命令可删除 CSP 规则中的 frame-ancestors:
curl '{osd endpoint}/api/appconfig/csp.rules.frame-ancestors' \
-X DELETE \
-H 'osd-xsrf: osd-fetch' \
-H 'Sec-Fetch-Dest: empty'
获取 CSP 规则中的 frame-ancestors
使用以下 cURL 命令可查看 CSP 规则中的 frame-ancestors:
curl '{osd endpoint}/api/appconfig/csp.rules.frame-ancestors'
优先级
动态配置会覆盖 YAML 配置(空 CSP 规则除外)。
为防止点击劫持(clickjacking),系统在必要时会自动向 YAML 定义的规则中添加 frame-ancestors: self 指令。
细粒度访问控制
当启用 Security 插件时,只有对配置索引 .udbsx_dashboards_config 具有写权限的用户才能调用修改类 API。
这些 API 调用必须携带包含安全信息的有效 cookie。
对于 GET 类型的 API,可在网络面板中找到现有的 GET 类型 JSON 请求,复制为 cURL 并将 API 名称替换为 appconfig 相关 API。
同样地,对于 POST 和 DELETE 类型的 API,可找到现有的 POST 请求,修改 API 名称及 --data-raw 参数中的值。
DELETE 请求还需将请求方法修改为 -X DELETE。