页面被别的网站嵌进 iframe 展示时,拦截写在哪个响应头

📅 2026-10-10 👁️ 0

页面被别的网站用 iframe 嵌走时,拦截写在响应头上,而不是写在页面里的一段脚本里。可用的是两条:X-Frame-Options 与内容安全策略中的 frame-ancestors 指令。前者只剩 DENY 和 SAMEORIGIN 两个可靠取值,后者才能表达「允许哪几个来源嵌」。如果需要的只是「谁都不能嵌」或「只允许同源嵌」,写前者就够;一旦要放行特定合作方,就必须用 frame-ancestors。

嵌走页面造成的不是显示问题

被嵌套的风险点在于:用户看到的界面是本站的,操作却是别人页面里布置的。合作方的推广页、聚合站、甚至伪装成正常站点的页面,都可以把登录框、留言表单放进一个看不见的外框里,把用户的点击引到本站的真实功能上。这类问题的通用叫法是点击劫持,它的成立条件很简单——页面允许被嵌入,且页面里有可交互的功能。

所以判断要不要拦,不看有没有人嵌,而看这一页有没有可交互的动作。

两条响应头各自的可用范围

X-Frame-Options 的两个可靠取值:DENY 表示文档不能在任何框架里加载,无论同源还是跨源;SAMEORIGIN 表示只有所有上级框架与本页同源时才允许嵌入。ALLOW-FROM 指定来源的写法已被废弃,规范文档里明确写着现代浏览器遇到带这个指令的响应头会完全忽略它——也就是说,一旦写了 ALLOW-FROM,整条拦截等于没加,而不是降级为只允许那个来源。

要表达「允许某些来源嵌」,需要使用内容安全策略头里的 frame-ancestors 指令,它的定义就是「哪些父页面可以用 frame、iframe、object 或 embed 嵌入本页」。文档同时提示:需要比 X-Frame-Options 更完整的选择时,应改用 frame-ancestors。

按页面类型分档的嵌入策略表

页面类型 建议档位 理由
后台与登录相关页面 DENY 只允许直接访问,任何嵌套都不合理
留言、评论等可交互表单页 DENY 或 SAMEORIGIN 表单在嵌套状态下最容易被借用
商品与业务办理页 SAMEORIGIN 允许本站内部框架,拒绝外部站点
需要对外分发的内容页 frame-ancestors 指定来源 允许合作方嵌入,同时收紧来源范围

写策略时的常见失误是「一刀切 DENY」把合法的分发场景也关掉,或者反过来为省事写了 ALLOW-FROM 却以为已经放行白名单。

站内已有的注入防护管不到这一层

内容站通常已经把注入类风险当作基本项:AnQiCMS 内置 JWT 认证、内容敏感词过滤与防采集干扰码,用于防御 SQL 注入与 XSS 攻击;留言与评论进入发布前还有内容审核与敏感词过滤这一道。这两层处理的是「提交进来的内容能不能执行、能不能发布」。

被嵌套是相反方向的问题:内容本身是干净的,页面却出现在别人的框架里,用户与上下文都不再可控。因此它不能靠敏感词过滤或内容审核解决,只能靠响应头声明来源策略。反过来,如果站点在反向代理或服务器层统一加头,就要确认三类页面(后台、表单页、分发页)是否用了同一份配置——按路径分档比全站一份更省事故。

常见问题

问:只在页面顶部加一段禁止嵌套的脚本可行吗? 答:不可行作为防线。脚本要被执行才生效,而嵌套页面可以先把外层的样式与遮挡布置好;声明必须在响应到达浏览器时就生效,也就是写在响应头里。

问:两条响应头能同时写吗? 答:可以。过渡期常见做法是同时下发,用 X-Frame-Options 兜住不支持细粒度指令的旧环境,用 frame-ancestors 表达真实策略;但要确认两者语义不冲突,避免一处 DENY、一处放行。

问:加了拦截之后自己的嵌入功能失效了怎么判断? 答:先看失效的是哪一层:本站页面嵌本站页面应当被 SAMEORIGIN 放过;若是第三方组件把内容放进框架展示,属于分发场景,应改为按来源收紧而不是整体关掉。

相关文章

有论文说 GEO 能把可见度提高约四成,站点上怎么复核这个数

生成式引擎优化那篇原始论文里被广泛引用的是一句上限口径:在基准测试环境下,GEO 手法可把可见度提升到约四成的增益,同时作者明确写到不同领域的效果差别很大。直接把这个数当成自家站点的预期收益是常见误读。本文拆解这个数字的实验设置,给出一套站内复核路径:固定基线与提问集、记录答案里的品牌与页面落点,再对上位站点能配合的模型说明文件与收录模块。

2026-10-10

同一套后台管三个站,其中一个样式错乱先查哪一层

站群里只有一个站点样式错乱时,先按错误的形状二分再决定查哪一层:大面积图片或样式文件缺失、导航位置跑偏,多与静态资源和站点各自的资源配置有关;整块结构错位、只有某个栏目变形,才往模板层查。本文给出按站核对的最小动作,并说明多站点下模板、导航与备份的归属边界,避免一次改动牵连到另外两个站。

2026-10-10

图片设成延迟加载后首屏快了,被抓到的内容会不会变少

延迟加载的作用是把资源标为非关键、需要时才取,因而缩短关键渲染路径;首屏变慢更多来自渲染阻断资源,与图片关系不大。给图片设延迟加载后,文档里写明的内容不变,变化发生在首次渲染时是否取回。本文按资源类型给出分档做法,并交代与标题自动配图、站点地图里媒体地址的衔接。

2026-10-10

AI 抓取开始按次收费之后,内容站要先确认哪几件事

按次收费的抓取控制已经在文档里给出机制:站点为抓取设定价格,自动访问若不提供支付凭证会得到需要付费的响应码,目前仍在封闭内测,且费率按域的区域层级配置而不是具体目录路径。内容站在这一趋势下要先确认三件事:排除规则怎么表达、给大模型的站点说明文件写了什么、防采集与授权是否互相矛盾。

2026-10-10

HTTP/2 的服务端推送被多数浏览器撤掉,首屏提前取资源靠什么

HTTP/2 的官方目标是用完整的请求与响应多路复用降低时延与队首阻塞,并用 HPACK 高效压缩首部字段;同版本引入的服务端推送因在实践中难以实现,已从多数主流浏览器引擎移除,替代手段是页面里的 rel=preload 声明与 103 Early Hints 状态码。本文说明这两种方式各自能提前到什么程度、首屏资源清单该怎么排,以及程序侧与网关侧各改哪一段,避免把优化押在一个已被撤掉的机制上。

2026-10-10

免密登录模块的信息泄露公告只评中等,泄露的是哪一类内容

一条针对二次验证与免密登录模块的公告,类别写作信息泄露,评级为中等关键、风险分值十二比二十五,维度串里机密性记为部分受影响、完整性记为零,利用条件标注为理论。本文按公告字段逐项拆解「中等」是从哪几个维度合成的,说明泄露类公告在没有公开细节时不该推断具体字段,并给出自有站点登录态与内容可见性的收口顺序。

2026-10-10

同行 CMS 的入口文件被换成篡改脚本,公开问题单里能读出什么

一份公开问题单记录了两次改动:2026 年 6 月 23 日入口启动文件被篡改,次日首页文件被篡改,问题单创建于 6 月 25 日、7 月 8 日关闭。被写入的脚本先判断访客是否来自搜索引擎,再把外部地址取回的内容输出。本文按问题单可核对的字段给出文件完整性核对顺序、恢复路径与改完之后的复验动作。

2026-10-10

编辑器模块连发越权公告,后台角色权限按什么口径收

编辑器模块的访问绕过公告评级为中等关键、风险分值十三比二十五,需要基本攻击条件并带有用户权限要求。本文按公告字段拆解越权类问题的读法,把收口口径落到动作分层:编辑、提交、发布三类动作分别归属不同用户组,先确认模块是否启用再收窄可执行范围,并用内容审核与敏感词过滤守住发布前的最后一道确认。

2026-10-10