| 值 | 说明 | 使用场景 |
|---|---|---|
DENY |
完全禁止被嵌入 | 敏感页面(登录、支付) |
SAMEORIGIN |
只允许同源页面嵌入 | 内部系统页面 |
ALLOW-FROM uri |
允许指定来源嵌入 | ⚠️ 已废弃,不推荐 |
👆 左侧页面可以被嵌入,右侧页面被浏览器阻止
打开开发者工具 Console 可以看到错误信息
// 单个路由
app.get('/transfer', (req, res) => {
res.setHeader('X-Frame-Options', 'DENY')
res.send(html)
})
// 全局中间件
app.use((req, res, next) => {
res.setHeader('X-Frame-Options', 'DENY')
next()
})
// 使用 helmet 库
const helmet = require('helmet')
app.use(helmet.frameguard({ action: 'deny' }))
add_header X-Frame-Options "DENY" always;
Header always set X-Frame-Options "DENY"
无防护页面:
有防护页面:
ALLOW-FROM 已被废弃,现代浏览器不支持frame-ancestors 作为补充