查 referer 发现一个陌生域名带来大量流量,打开一看是把整站套在 iframe 里,顶部盖了一条他自己的广告。乍看像缓存或者权限的锅,追下去往往不是。
add_header X-Frame-Options "SAMEORIGIN" always; add_header Content-Security-Policy "frame-ancestors 'self'" always;
追下去是这么回事:响应头里没有 X-Frame-Options,也没有 CSP 的 frame-ancestors,浏览器默认允许任何站点嵌套。用户看到的地址是别人的,点击和广告收益都算在他那边。
「防止 iframe 嵌入」这个问题文档写得含糊,实际行为以当前版本为准,别照旧版本的结论套。一次只改一处,改完立刻验证,几个改动叠在一起,出问题就说不清是谁导致的。
先做最小复现,能稳定跑出来的问题,排查成本会低一个数量级。别只看报错的最后一行,往上看几行,真正的起因通常在上面。
同类问题如果隔一段时间又出现,多半是某个定时任务或重启流程把改动冲掉了。
具体做法是,先加 X-Frame-Options: SAMEORIGIN,兼容老浏览器;再补 CSP 的 frame-ancestors 'self',新浏览器以这条为准;确实要合作方嵌入的页面单独放行,别全局放开。
验收就看一点,用在线 iframe 测试页嵌套本站,控制台报 refused to display,页面空白。
