很多团队一上 AMP,就会遇到这种窘境:页面确实快了,搜索曝光也好看了,但安全同事开始频繁问问题——数据到底是从谁那儿发出去的?跳转带登录态算谁的?CDN 被打穿算谁的锅?一旦出现 XSS、跳转劫持或者假登录页,边界责任瞬间变得模糊。
先把结论摊开说:
AMP 的前端约束比传统网页更严,但它把原来集中在源站的一条链拆成了“浏览器 + AMP 缓存 + 源站”三段。
如果你不主动重画安全边界,AMP 只会帮你把老问题放大,而不是自动变安全。
本文就干两件事:说清 AMP 到底多出哪些安全边界,然后给一套能直接照做的收边方案。
一、AMP 到底动了哪些安全边界?
1、来源从“一对一”变成“一对多”
以前是浏览器直连你自己的域名,TLS 终止点、日志、责任都在你这边。
上 AMP 后,用户首先命中 cdn.ampproject.org 之类的缓存域,在第三方域名下渲染页面,再通过组件去你源站拉数据或跳转登录。
直接后果:
- 浏览器地址栏不是你的域名,用户辨认真实来源更难
- Cookie 域、CSP、Referer 变复杂,同源防护打折
- 出事时要先分:是缓存层问题,还是源站配置问题
2、脚本交互被“限制但没消失”
AMP 禁的是“随便插 JS”,不是“没有逻辑”:
各种组件、模板、远程接口照样能做复杂交互。
如果你只是觉得“不能写 JS 就很安全”,没好好做接口鉴权、输出过滤,那只是把 XSS 换成了“接口层数据泄露”和“跳转滥用”。
3、登录、个性化、追踪被拆成碎片
为了快,AMP 常见做法是:
- 登录态不直接暴露给 AMP 缓存
- 个性化、埋点通过接口异步拉
- 复杂流程靠“从 AMP 跳正式站再跳回来”拼起来
如果没有统一设计,这些碎片化流程很容易变成审核不了、监控不全的灰色路径。
二、平台和风控会盯哪些点?
1、请求到底从哪儿发出去?
平台会看三件事:
- 页面实际运行域(AMP 缓存域)
- 回源接口、跳转目标的域名
- 跳转链有多长,有没有“看起来像你,实则指到别人”的情况
一旦发现“页面看起来属于你,数据却发给一堆杂域名”,风控评分一定不好看,尤其是登录、支付、收集信息的表单。
2、缓存层和源站安全基线是否对齐?
典型问题:
- AMP 缓存全 HTTPS,你源站却还有 HTTP 资源和野生脚本
- CSP 只写了自家域名,没有覆盖 AMP 缓存域和接口域
- 第三方脚本在 AMP 环境下失去原有限制
审计工具看的是整条链路里最脆的一环,而不是你某一端“看起来很规范”。
3、表单和跳转是否留下“钓鱼空间”?
敏感点只有几个:
- AMP 页面是否直接承载登录、支付一类表单
- 跳到正式站时,域名变化是否清晰可见、有无混淆空间
- 校验逻辑是否前后不一致,给了中间人可乘之机
只要存在“UI 看着像官方,域名其实不是”的空间,安全评分就不会高。

三、怎么把 AMP 安全边界拉回来?
1、先给 AMP 画一条“能做什么”的红线
建议直接定成四条规则:
1、AMP 只展示内容,不直接处理账号级敏感数据
2、允许低风险表单(订阅、反馈),不允许密码、支付信息类表单
3、所有高风险动作(登录、支付、绑卡)一律跳正式站完成
4、AMP 内所有接口只返回匿名视图数据,不下发完整账号信息
以后评审页面、组件、产品需求,就对照这四条看有没有越界。
2、源站和缓存层用同一套安全策略说话
最少做三件事:
1、CSP 一次性写全:AMP 缓存域、正式站域、接口域全部在内,拒绝来路不明的第三方脚本和 iframe
2、表单提交目标只允许白名单域,不接受任意 action
3、从 AMP 过来的敏感接口,都要加来源校验:专用 header、签名、nonce,不能只信 Referer
这样,安全逻辑收敛到接口层:不管入口是 AMP 还是正式站,只要请求进来就按同一套规则审。
3、登录和个性化,强制收束成一条“标准链路”
做法可以简单粗暴点:
1、AMP 里只放明显的“登录/继续操作”按钮,不嵌登录表单
2、所有入口一律跳到正式站 HTTPS 域名,携带不可伪造的 state 或一次性 token
3、登录成功后是否回到 AMP,由你控制;无论如何,用户看到的域名变化要干净透明
技术侧只维护这一条“官方链路”,其它绕着走的路径一律按异常处理,这样审计和告警都能聚焦。
4、别只在一台机器上测,用“环境矩阵”压一遍
很多 AMP 边界问题,只在某些组合下才暴露:
- 某些地区的 AMP 缓存节点
- 某类机型 + 浏览器 UA
- 某些入口(比如搜索结果、广告落地页)
一套可执行的检查方式:
1、选出若干典型环境:国内移动、海外移动、桌面搜索等
2、为每个环境准备对应的语言、时区、IP 出口
3、从“搜索 → AMP → 正式站 → 登录/下单”整条链跑一遍
4、记下每次跳转的域名变化、HTTPS 状态、告警提示,列出异常组合集中修
四、实战落地示例,配合 VMLogin 做环境回归
1、从“页面清单 + 风险标记”开始
假设你负责的站点刚大规模上 AMP,想在不推翻架构的前提下把边界收回来,可以照这个流程做:
1、拉一份 AMP 页面清单,标出有哪些:表单、跳转、异步接口
2、给每个元素标级别:只读、低风险(订阅、反馈)、高风险(登录、下单、收款)
3、把高风险操作全部改成“跳正式站处理”,在 AMP 内只保留入口
4、统一 CSP 和表单白名单,禁止表单直接提交到陌生域名
5、为来自 AMP 的接口加一层“来源签名 + 业务参数校验”,拒绝篡改和伪造
做到这一步,你已经把“危险动作”集中到了正式站,边界清了不少。
2、用 VMLogin 搭一套“环境矩阵”回归
手工切浏览器、改代理、调时区去测 AMP,非常浪费时间,而且复现困难。
更高效的方式,是用环境管理工具把测试环境固化下来。
以 VMLogin 为例,可以这样用:
1、为几类关键用户画像建浏览器配置文件:
- 本地移动访问
- 海外搜索访问
- 海外广告落地流量
2、在每个配置文件里固定:指纹、语言、时区、代理出口,让它们看起来像真实用户群
3、把这些环境分配给安全/测试同事,他们点开对应配置,就能在指定地区和设备视角下体验“搜索 → AMP → 正式站”的完整流程
4、把发现的问题挂回页面和接口改造,再用同一套环境二次回归,保证修过的东西不在别的地区、别的入口又炸一次
VMLogin 在这里的作用不是“防封”,而是帮你把测试环境标准化:
谁在什么环境下测了哪条链、看到了什么结果,都有据可查,AMP 引入的安全边界问题也更容易被系统性识别和复现。
AMP 本身不会帮你多一层“安全墙”,它做的只是把“浏览器—缓存—源站”这条路拆得更细。
你要做的,是用规则把“哪些操作可以在 AMP 做、哪些必须回正式站、所有请求最终按什么标准审”三件事写死,再用类似 VMLogin 的工具配合多环境测试,把这条线画清、压实,而不是指望“上了 AMP 自然就安全”。