2026 年 10 月的应用劫持事件之后,商家们对自己技术栈中的每个应用都提出了一个尖锐的问题:如果这家供应商遭到攻击,我的顾客会受到什么影响?
这是一个正确的问题。下面是关于 Navi+ 的直接回答,它基于应用的实际构建和配置方式,也包括任何应用都无法保证消除的局限。
- 只读权限。 Navi+ 仅向 Shopify 申请四项读取权限:主题、商品、在线商店导航和内容。不涉及订单、客户,也没有主题的写入权限。
- 不接触结账。 Navi+ 没有结账扩展,也没有 Web 像素。它从不在结账页面上运行。
- 不编辑主题。 店铺前台菜单通过 Shopify 应用嵌入块加载,而不是通过编辑主题文件或使用 ScriptTag。
- 买家从不与我们的服务器通信。 菜单以静态文件的形式发布到 CDN 上。
概念插图:一个只读取店铺数据、却从不触及结账或客户数据的导航层。
示意图:Navi+ 能够触及的部分(绿色)以及它从不触碰的部分(灰色)。
属于主题中心的一部分浏览 Shopify 安全专题中心 →
1. 权限:只要菜单所需的
导航应用需要了解你的主题布局、商品、菜单和页面。Navi+ 向 Shopify 申请的,也只有这些:
read_themesread_productsread_online_store_navigationread_content
没有 write_themes,没有 write_script_tags,也没有订单或客户相关的权限范围。即使攻击者入侵了应用的 Shopify 访问权限,这些权限也不允许其编辑你的主题文件或读取你的订单历史。
2. 安装与管理会话:由 Shopify 签名
Navi+ 通过 Shopify 管理的安装流程和令牌交换完成身份验证。当你在 Shopify 后台中打开 Navi+ 时,Shopify 会提供一个签名的 ID 令牌。在将其交换为访问令牌之前,Navi+ 会验证四个条件:
- 密码学签名有效。
- 令牌是为 Navi+ 签发的。
- 令牌属于你指定的
myshopify.com店铺。 - 令牌未过期。
最终获得的访问令牌是一个会过期的离线令牌,而不是永久密钥。
为防止点击劫持,Navi+ 管理页面还会指示浏览器,仅在你的店铺后台和 Shopify 后台域名中渲染。
每当 Shopify 向 Navi+ 发送后台事件(例如卸载 Webhook)时,应用都会验证 Shopify 的签名,并拒绝任何不匹配的负载。
3. 店铺前台:应用嵌入,而非主题手术
在你的店铺前台,Navi+ 完全以主题应用扩展(应用嵌入块)的形式运行。你可以在 Shopify 主题编辑器中通过一个简单的开关来启用或关闭它。由于 Navi+ 从不写入你的主题文件,我们的代码不会阻碍你的主题更新,而且如果你卸载应用,也无需从 theme.liquid 中清除残留代码。
4. 静态菜单文件:买家不发起实时调用
当你发布菜单时,Navi+ 会将其编译为 CDN 上的一个静态文件。店铺前台脚本以异步方式加载并读取该文件。买家的浏览器从不调用 Navi+ 的应用服务器或数据库。 这带来两项明确的优势:
- 性能与韧性。 即使我们的应用服务器变慢或离线,你已发布的菜单仍然可以正常工作。
- 故障隔离。 店铺前台脚本经过安全封装。如果它出现故障,菜单不会显示,错误会被记录,而你的店铺、购物车和结账仍可正常运行。如果主 CDN 失败,还会尝试备用 CDN。
5. 买家数据:保留在浏览器中
Navi+ 不接触结账,只读取购物车商品数量用于购物车角标。当客户登录时,菜单可以检查其客户标签或 B2B 公司信息,从而显示或隐藏特定项目,例如批发链接。这项检查发生在买家的浏览器中;我们没有发现任何途径会将这些信息发送给 Navi+。
以下两项运营细节,供你进行隐私审查时参考:
- Navi+ 包含可选的店铺前台使用分析(Google Analytics),商家可以将其关闭。
- 一个小规模的性能采样(约占 Shopify 页面浏览量的 5%)会记录加载耗时,并使用哈希处理后的店铺名称。它不存储 IP 地址、用户代理或页面 URL。
6. 坦诚的局限
没有任何应用供应商能够承诺“无法被入侵”。以下是我们认为谨慎的商家应当了解的 Navi+ 具体情况:
- 菜单可以包含自定义 HTML。 Navi+ 允许商家在菜单中添加自定义 HTML 块和链接。这种灵活性很强大,但也意味着,任何能够编辑你 Navi+ 菜单的人,都可以改变店铺前台显示的内容。请据此限制 Shopify 员工权限。
- 菜单文件由供应商提供。 与 10 月事件中的应用一样,Navi+ 从自己的基础设施提供配置。我们的保护措施包括只读权限范围、不接触结账,以及发布静态文件而非运行实时设置代码。它们能够降低风险,但无法将风险降为零。
- 我们仍在改进。 应用的安全工作仍在持续进行,相关变化我们会及时更新本页面。
7. 如何自行检查任何菜单应用(包括 Navi+)
- 打开 设置 → 应用和销售渠道,选择该应用,并阅读其访问权限列表。
- 在主题编辑器中,查看 应用嵌入(App embeds),了解哪些应用在你的店铺前台上运行。
- 在无痕窗口中打开你的店铺,打开浏览器开发者工具,检查哪些域名加载了脚本。
- 点击所有通往结账或购物车的菜单链接,确认你始终停留在自己的域名上。
- 删除你不再使用的菜单应用;关闭其嵌入即可立即停止其代码运行。
如需了解全局,请阅读 2026 年 Shopify 商家面临的威胁、Shopify 已经为保护店铺所做的工作,以及值得了解的安全技术。
来源
- Navi+ 应用配置(权限范围、应用嵌入、店铺前台加载器),于 2026 年 11 月 4 日审阅。
- Shopify.dev,Token exchange:https://shopify.dev/docs/apps/build/authentication-authorization/access-tokens/token-exchange
- Shopify.dev,Set up iframe protection:https://shopify.dev/docs/apps/build/security/set-up-iframe-protection
- Shopify.dev,Privacy law compliance (webhooks):https://shopify.dev/docs/apps/build/privacy-law-compliance
- Roman Zipp,Shopify shops hit with ongoing Checkout Hijack attack:https://romanzipp.com/blog/shopify-hit-with-phishing-attack