人人都会AI编程

21.3 CSP 内容安全策略

更新时间:2026-07-11

为什么 Tauri 应用也需要 CSP

  • 前端无论使用什么框架,最终都会在 WebView 中执行。如果应用加载了不可信的外部内容(如用户输入的富文本、第三方广告等),恶意脚本仍可能被执行。
  • Tauri 的 IPC 安全性很好,但 CSP 能作为纵深防御,阻止攻击者在前端层面加载远程恶意资源或发起数据窃取。
  • 许多安全审计和合规要求强制启用 CSP 头。

如何配置 CSP

在 Tauri 中,你有两种方式设置 CSP:

1. 通过 HTML 的 <meta> 标签(简单直接)

<meta http-equiv="Content-Security-Policy" content="default-src 'self'; script-src 'self'; style-src 'self' 'unsafe-inline'">

2. 通过 Tauri 配置文件 tauri.conf.json 设置响应头(推荐,可作用于所有页面)

{
  "app": {
    "security": {
      "csp": "default-src 'self'; script-src 'self'; style-src 'self' 'unsafe-inline'; connect-src 'self' https://api.example.com"
    }
  }
}

这种方式会在每个前端页面的响应中自动注入 Content-Security-Policy 头,覆盖范围更广,不会被前端文档的动态修改绕过。

实用的 CSP 规则示例

以下策略适用于大多数 Tauri 桌面应用(不会加载远程页面,只使用本地资源和特定 API):

default-src 'self';
script-src 'self';
style-src 'self' 'unsafe-inline';
img-src 'self' data: https:;
connect-src 'self' https://your-api-domain.com;
font-src 'self';
object-src 'none'
  • 'self':只允许从本地应用目录加载资源。
  • 'unsafe-inline':如果使用内联样式或 style 标签(Vue 等框架很常见),需要这个指令;尽量避免在 script-src 中使用。
  • data::允许 data URI 图片(如 base64)。
  • connect-src:显式列出允许的 API 端点,防止数据外泄给未知服务器。
  • object-src 'none':禁用 Flash、插件等过时技术。

常见问题与注意事项

  • 开发时需要 eval() 某些框架的开发模式会用到 eval,你可以临时在开发 CSP 中加入 'unsafe-eval',但打包前务必移除。
  • WebView 调试工具 通常不受 CSP 限制,方便排查。
  • 更新依赖时检查新的内联样式 如果升级 UI 库后界面突然“变白”,很可能是 CSP 挡住了新引入的内联样式,用浏览器控制台就能看到违规报告。
  • CSP 不等于绝对安全 它是一层额外的“网”,尽量避免在 default-src 中使用 *https: 这种宽泛的源。

把 CSP 设置成具体、最小权限的策略,你的 Tauri 应用就多了一层对抗前端注入的坚固防线。在 tauri.conf.json 里配置一个合理的 CSP,几乎零成本,却能显著提升应用的安全评级。