安全
Workflow Webhooks 基于什么构建、在何处运行、您的 Webhook、密钥和交付内容如何进行加密和隔离,以及我们如何保持应用的最新状态。全程不使用 PHP。
Workflow Webhooks 由 Code Creation Labs 开发并运营。本页面介绍了该应用的构成、运行环境、您的商店数据如何得到保护,以及我们如何确保系统始终保持最新状态。本页面面向商店所有者以及填写安全问卷的任何人。 法律相关内容(隐私政策、数据处理协议、次级处理者)请参见 法律与数据保护。
该应用基于什么构建
| 图层 | 我们使用什么 |
|---|---|
| 应用程序代码 | 基于 Node.js 的 TypeScript,这是当前的长期支持版本。管理页面、接收您的 Webhook 的端点以及将 Webhook 传递给 Shopify Flow 的工作进程均基于同一代码库。 |
| 数据库和缓存 | PostgreSQL(Google Cloud SQL)和 Redis(Google Cloud Memorystore) |
| 队列 | 接听来电后,该来电会被放入 Google Cloud Pub/Sub 队列,并由一个独立的工作进程进行处理,因此即使出现来电激增或 Shopify 响应缓慢的情况,也不会丢失任何一次消息投递。 |
| 托管 | 位于 Google Cloud 区域 europe-west1(比利时,欧盟)上的 Google Kubernetes Engine 中的容器。数据库、缓存和队列均位于该区域内。 |
| Shopify 集成 | Shopify 的官方应用库、Shopify Flow 触发器和操作,以及 Shopify 的 Webhook |
| 您的店面 | 您的主题中没有任何内容在运行。用于浏览器调用的可选应用代理 URL(参见 CORS、应用代理 URL 和浏览器调用)由 Shopify 在您的自有域名上提供,并通过 Shopify 的签名进行验证。 |
该服务中完全不包含 PHP、WordPress、Java 或其他任何运行时环境。该应用已在 Shopify 应用商店上架,并通过了 Shopify 的应用审核,该审核涵盖了 Shopify 的安全要求以及客户数据保护要求。
您的数据如何得到保护
**传输过程中。**您的浏览器、Shopify、调用您 Webhook 的系统以及该应用之间的所有连接均采用 TLS 加密。数据库、缓存和队列均无公开地址:只能从我们的私有网络内部访问。
**静止状态。**所有数据库和存储在静止状态下均采用我们通过 Google Cloud KMS 管理的密钥进行加密。
**在此基础上还增加了字段级加密。**最敏感的值会受到第二层保护:您商店的 Shopify 访问令牌、每个 Webhook 的身份验证密钥,以及您为转换函数存储的每个密钥。 每个值都会使用 Cloud KMS 中的独立密钥通过 AES-256-GCM 算法单独加密,并启用自动密钥轮换;仅在需要时才在内存中解密。这些密钥绝不会写入日志,也不会通过开发者 API 返回,更不会传递给 Sidekick。
**密钥。**该服务本身的 API 凭据和密钥存储在 Google 密钥管理器中,并在服务启动时加载。它们既不在代码中,也不在容器镜像中,更不在构建管道中。
**数据最小化。**该应用在安装时不会请求访问您商店的数据:启动Shopify Flow工作流程无需任何权限,且该应用绝不会自行读取商品、订单或客户信息。每次数据传输所携带的负载与调用系统发送的内容完全一致。
谁可以访问什么
- **仅限您的商店。**每条记录都包含其所属的商店,且每次查询的范围仅限于已通过身份验证的商店。一个商店绝不能读取或修改另一个商店的 Webhook 或交付项,而同步响应会与发起请求的商店相关联。
- **仅接受经过验证的请求。**Shopify 管理后台中的页面均通过 Shopify 会话令牌进行身份验证。在处理任何数据之前,Shopify Flow 回调和 Shopify 自身的 Webhook 会通过 Shopify 的 HMAC 签名进行验证,而内部消息则通过 Google 签名的身份凭证进行验证。
- **您的 Webhook,您的规则。**每个 Webhook URL 都无法被猜出,您可以自行选择调用方如何验证身份:静态令牌、对请求主体的 HMAC 签名,或者对于无法签名的来源则不作验证。 可选的 IP白名单 可进一步限制调用者;调用者的地址取自网络连接,而非请求头,因此无法被伪造。系统会识别重复的请求,并仅处理一次。请参阅 身份验证。
- **转换函数。**您为 变换函数 编写的 JavaScript 代码将在一个受隔离的沙箱环境中运行,该环境设有时间和内存限制,且与应用程序自身的服务器位于不同的基础设施上。该代码绝不会接触到应用程序的凭据或您的 Shopify 访问令牌,其出站请求在建立连接前会先与私有网络范围进行比对。
- **出站请求。**对于 定时URL轮询 和 从 Shopify Flow 调用 Webhook,应用代表您调用的 URL 会在建立连接前进行检查:将拒绝循环回调、链路本地、云元数据和私有网络地址,包括通过重定向访问的情况。
- **我们的团队。**仅可通过 Google Cloud IAM 及个人账户访问生产系统。内部维护工具不会暴露在互联网上。
我们如何保持应用的更新
- **每次变更在发布前都会经过扫描。**该管道会执行类型检查和代码规范检查、静态应用程序安全测试(SAST)、机密信息检测、依赖项漏洞扫描以及容器镜像扫描。我们的发布标准是:依赖项和镜像中不得存在任何已知漏洞。
- **运行时和操作系统。**该容器镜像(基于 Alpine Linux 的 Node.js)会在每次发布时重新构建,因此运行时和操作系统的补丁会持续推送。托管型 Kubernetes 平台会确保底层节点始终保持最新补丁状态。
- **Shopify 平台。**我们持续跟踪 Shopify 的 API 版本以及 Shopify 应用库的安全公告,并及时应用更新。该应用运行在最新的 Admin API 版本上。
- **安全审查。**我们定期对每条路由、数据路径和数据库查询进行全面的内部审查,最近一次审查于2026年10月进行。
- **监控。**我们全天候监控系统可用性,并在我们的状态页面上发布相关信息,一旦出现错误,系统会向我们发出警报。运行日志最多保存 30 天,且绝不包含令牌或密钥。
保留与删除
- 只要应用安装在设备上,发送记录就会保留,以便您查看和回放通话记录,并且您可以随时删除这些记录。在存储发送记录之前,可能包含凭据的报头会被屏蔽。
- 当您卸载该应用时,其对您商店的访问权限将立即被删除。卸载后48小时内,Shopify会发出 shop/redact 请求,以此清除商店中剩余的数据,包括您的转换函数存储的所有内容。
- Shopify
- 次级处理者及完整的数据保留时间表详见privacy policy。如需获取已签署的数据处理协议,请发送邮件至workflow-webhooks.app/dpa。
报告安全问题
如果您认为发现了安全漏洞,或者需要填写安全问卷,请发送电子邮件至 support@codecreationlabs.com。我们将优先处理并回复安全报告。
