安全

我们的安全模型一句话概括:服务器上没有任何可被攻击的东西。以下所有内容均可通过您的 DevTools 验证。

架构

Abundera QR 是一个由 Cloudflare Pages 提供服务的静态单页应用程序。没有应用服务器、数据库、用户账户、身份认证、API 端点,也没有处理用户数据的后端代码路径。每个 QR 的生成、编码、扫描和渲染操作完全在您的浏览器内运行。

威胁模型

由于我们不收集、存储或传输任何用户数据,最常见的 Web 应用威胁, 凭证盗取、数据库泄露、会话劫持、服务器端注入, 均不适用。剩余的攻击面是从我们的源站提供的静态资产包(HTML、CSS、JavaScript)。我们的设计假设:

内容安全策略, 按指令说明

当前策略(可在任意请求的响应头中验证):

Content-Security-Policy:
  default-src 'self';
  script-src 'self' 'wasm-unsafe-eval';
  worker-src 'self' blob:;
  style-src 'self' 'unsafe-inline';
  font-src 'self';
  img-src 'self' data: blob: https:;
  connect-src 'self' https:;
  frame-ancestors 'none';
  base-uri 'self';
  form-action 'self'

每条指令的作用及其妥协之处:

/bio/*(为用户提供的头像放宽 img-src)和 /embed/*(为有意嵌入放宽 frame-ancestors)适用不同的 CSP 策略。两者均记录在 site/_headers 中。

传输与框架头

Service Worker

我们的 Service Worker(site/sw.js)只缓存同源资产。fetch 处理程序明确拒绝跨源请求和非 GET 方法, 您可以在 GitHub 上阅读逻辑。缓存写入被包裹在 event.waitUntil() 中,因此不会在导航中途被丢弃。

输入净化

每条接受用户输入的渲染路径均将其视为不可信文本:

跨源图片获取

当用户粘贴一个 https: URL 作为 vCard 照片或 Logo 时,浏览器根据 CORS 和我们 CSP 的 img-src 白名单获取它。图片被渲染到 canvas 中。它永远不会成为实时 DOM,不会作为代码运行,也不会到达我们的源站, 获取操作是浏览器到远程图片,结果在客户端绘制。控制远程图片 URL 的攻击者可以追踪该 URL 被加载(其服务器上的一行日志),但无法从我们的页面窃取任何内容。

子资源完整性(SRI)

我们提供的所有 JavaScript 和 CSS 均为同源。我们不加载第三方脚本或样式表,因此 SRI 哈希不适用。如果我们将来加载第三方资产,我们将在其上添加 SRI integrity 属性,并在本页记录哈希更新流程。

报告漏洞

如果您发现影响 Abundera QR 的安全问题, 无论是在我们的代码、部署还是我们提供的依赖项中, 请私下向 security@abundera.ai 报告。我们的目标是在 72 小时内完成分类处理。您也可以通过 /.well-known/security.txt 文件中的联系方式联系我们。

暂无漏洞赏金

我们目前不提供有偿赏金,但每一份经确认的有效报告都将在更新日志中获得致谢,并收到我们公开的感谢。

验证以上所有内容

本页每项声明均可通过浏览器 DevTools 验证,无需信任我们:

联系方式

安全披露:security@abundera.ai

最后更新:2026-04-19。下次审查:2026-07-19。