Skip to content

安全策略接入

Kupola 提供最低限度的动态属性保护和诊断,不提供 HTML sanitizer、URL allowlist、CSP 或权限系统。安全策略必须由应用拥有。

HTML sanitizer

优先为每个 mount 传入同步 sanitizer,避免全局可变配置在多应用或微前端之间互相影响。

js
walk(root, {
  sanitizer(html) {
    return DOMPurify.sanitize(html, { USE_PROFILES: { html: true } })
  },
})

返回 Promise、非字符串或抛出异常会触发 W023,并清空本次 k-html 写入。异步富文本处理应先完成再写入 scope,不能直接作为 sanitizer 返回值。

URL normalizer

在 controller 中按业务来源和用途规范化 URL,再写入 scope。下面只是导航链接示例,不适用于脚本、iframe、文件嵌入等主动内容。

js
function safeLink(value) {
  const url = new URL(value, location.origin)
  if (!['http:', 'https:', 'mailto:', 'tel:'].includes(url.protocol)) return ''
  if (url.protocol === 'https:' && url.hostname !== 'docs.example.com') return ''
  return url.href
}

运行时会拒绝许多危险动态 URL,但业务仍必须定义允许的域名、路径、下载类型与重定向规则。

CSP 与可信模板

模板表达式使用 new Function(),因此需要 script-src 'unsafe-eval'。不能使用该 CSP 例外的页面应选择 Kupola 的 JavaScript API、组件 API 和原生事件,不挂载表达式指令。无论是否启用 CSP,都不要将用户可控内容拼接到 k-datak-onk-bind 或其他表达式属性中。

k-style 不是 CSS sanitizer。用 CSP 的 style-srcimg-srcfont-srcconnect-src 限制资源来源,并由业务限制可写 style 属性和值。