安全
Workflow Transactional Email 基于什么构建、在何处运行、您的邮件凭据和存储数据如何进行加密和隔离,以及我们如何保持应用程序的更新。全程不使用 PHP。
Workflow Transactional Email 由 Code Creation Labs 开发并运营。本页面将说明该应用的构成、运行环境、您的商店数据如何得到保护,以及我们如何确保系统始终保持最新状态。本页面面向商店所有者以及填写安全问卷的任何人。 该应用存储的数据及其保存期限详见 数据、隐私与安全;法律相关内容(隐私政策、数据处理协议、次级处理者)详见 法律与数据保护。
该应用基于什么构建
| 图层 | 我们使用什么 |
|---|---|
| 应用程序代码 | 基于 Node.js 的 TypeScript,这是当前的长期支持版本。管理页面、布局编辑器以及运行 Shopify Flow 步骤的服务均基于同一代码库。 |
| 数据库和缓存 | PostgreSQL(Google Cloud SQL)和 Redis(Google Cloud Memorystore) |
| 托管 | 位于 Google Cloud 区域 europe-west1(比利时,欧盟)中的 Google Kubernetes Engine 上的容器。数据库、缓存、文件存储和应用程序日志均位于该区域内。 |
| Shopify 集成 | Shopify 的官方应用库、Shopify Flow 操作、用于可选权限的管理后台 GraphQL API 以及 Shopify 的 Webhook |
| 电子邮件投递 | 您连接的邮箱:您自己的 SMTP 服务器、Microsoft 365 或 Google Workspace。该应用发送给您的提醒邮件将通过位于法兰克福的 Amazon SES 发送。 |
| 您的店面 | 你的主题和结账页面中都没有任何内容显示。 |
该服务中完全不包含 PHP、WordPress、Java 或其他任何运行时环境。该应用已在 Shopify 应用商店上架,并通过了 Shopify 的应用审核,该审核涵盖了 Shopify 的安全要求以及客户数据保护要求。
您的数据如何得到保护
**传输过程中。**您的浏览器、Shopify、您的邮件服务提供商与该应用之间的所有连接均采用 TLS 加密。数据库和缓存没有公开地址:只能从我们的私有网络内部访问。
**静止状态。**所有数据库和文件存储在静止状态下均采用我们通过 Google Cloud KMS 管理的密钥进行加密。
**此外还增加了字段级加密。**任何可能被用于代表您发送信息的內容都会获得第二层保护:SMTP 用户名和密码、Microsoft 365 和 Google OAuth 令牌、您存储的密钥、您商店的 Shopify 访问令牌,以及您退订列表中的地址。 每个值都会使用 Cloud KMS 中的独立密钥通过 AES-256-GCM 算法单独加密,并支持自动密钥轮换;仅在操作执行的瞬间才在内存中解密。 每次对受保护值的解密操作都会记录在内部访问日志中。在操作历史记录写入之前,机密值会被屏蔽,且绝不会通过开发者 API 或 Sidekick 返回。
**密钥。**服务本身的 API 凭据和密钥存储在 Google 密钥管理器中,并在服务启动时加载。它们既不在代码中,也不在容器镜像中,更不在构建管道中。
数据最小化。 安装该应用后,它无法访问您商店的数据。客户数据之所以会发送到邮箱,完全是因为您通过Shopify Flow将其传递过去。四项可选权限(读取单个订单或客户的元字段文件、创建唯一折扣码)会在应用内直接请求,通过Shopify自带的对话框授予,且可随时撤销。请参阅权限:该应用可以从您的商店读取哪些信息。
谁可以访问什么
- **仅限您的商店。**每条记录都包含其所属的商店,且每次查询的范围仅限于已通过身份验证的商店。一个商店绝不能读取或修改另一个商店的布局、发送者、密钥或历史记录。
- **仅限经过验证的请求。**Shopify 管理后台中的页面均通过 Shopify 会话令牌进行身份验证。在处理任何数据之前,Flow 步骤和 Shopify 自身的 Webhook 都会通过 Shopify 的 HMAC 签名进行验证,且同一 Flow 步骤即使被发送两次,也仅执行一次。
- **渲染后的内容。**布局在我们的服务器上进行渲染,并在发送前对结果进行安全处理:脚本、事件处理程序、javascript: URL、iframe 和表单元素均会被移除,因此从 Shopify Flow 传递过来的值不会在收件人的收件箱中变成可执行内容。
- **出站请求。**对于HTTP Request操作、从 URL 获取的附件以及元字段引用的文件,应用会代表您连接的 URL 将在建立连接前进行检查:将拒绝所有环回地址、链路本地地址、云元数据地址和私有网络地址,包括通过重定向访问的情况。重定向次数受限,且响应大小受限。
- **我们的团队。**仅可通过 Google Cloud IAM 及个人账户访问生产系统。内部维护工具不会暴露在互联网上。
我们如何保持应用的更新
- **每次变更在发布前都会经过扫描。**该管道会执行类型检查和代码规范检查、静态应用程序安全测试(SAST)、机密信息检测、依赖项漏洞扫描以及容器镜像扫描。我们的发布标准是:依赖项和镜像中不得存在任何已知漏洞。
- **运行时和操作系统。**该容器镜像(基于 Alpine Linux 的 Node.js)会在每次发布时重新构建,因此运行时和操作系统的补丁会持续推送。托管型 Kubernetes 平台会确保底层节点始终保持最新补丁状态。
- **Shopify 平台。**我们持续跟踪 Shopify 的 API 版本以及 Shopify 应用库的安全公告,并及时应用更新。该应用运行在最新的 Admin API 版本上。
- **安全审查。**我们定期对每条路由、数据路径和数据库查询进行全面的内部审查,最近一次审查于2026年10月进行。
- **监控。**我们全天候监控系统可用性,并在我们的status页面上发布相关信息,一旦出现错误,系统会向我们发出警报。运行日志存储在同一欧盟区域内,最长保留30天,且绝不包含任何凭据或机密信息。
保留与删除
- 操作记录(其中记录了已发送的内容,因此属于客户数据)将在30天后自动删除。
- 卸载将立即且不可逆地删除所有内容:布局、发件人、密钥、历史记录、退订列表以及已上传的文件。
- Shopify 的强制性隐私请求(customers/data_request、customers/redact 和 shop/redact)均会在 Shopify 设定的时限内自动处理,其中包括将客户加入退订列表的操作。
- 存储内容的完整列表详见数据、隐私与安全。次级处理者及数据保留期限详见privacy policy。如需获取已签署的数据处理协议,请发送邮件至[workflow-transactional-email.app/dpa
报告安全问题
如果您认为发现了安全漏洞,或者需要填写安全问卷,请发送电子邮件至 support@codecreationlabs.com。我们将优先处理并回复安全报告。
