2026.05.24 | youres | 14次围观
什么是X-Frame-Options?
X-Frame-Options是一个HTTP响应头,用于指示浏览器是否允许一个页面在<frame>、<iframe>、<embed>或<object>中展示。这个头部是DENY、SAMEORIGIN或ALLOW-FROM uri三种指令之一。
主要作用:
- 防止点击劫持攻击
- 保护网站内容不被恶意嵌入
- 增强网站的安全性
X-Frame-Options的三种指令
1. DENY
最严格的指令,完全禁止页面在任何iframe中展示。
add_header X-Frame-Options "DENY" always;
适用场景:
- 不希望任何网站嵌入你的页面
- 高度注重安全的网站
- 独立运行的Web应用
2. SAMEORIGIN
只允许同源网站嵌入页面。这是最常用的设置。
add_header X-Frame-Options "SAMEORIGIN" always;
适用场景:
- 网站内部有iframe嵌入需求
- 需要平衡安全性和功能性
- 大多数企业的选择
3. ALLOW-FROM uri(已废弃)
允许指定的URI嵌入页面。注意:这个指令在现代浏览器中已被废弃,不推荐使用。
# 不推荐使用,大多数现代浏览器已不支持
add_header X-Frame-Options "ALLOW-FROM https://example.com" always;
替代方案:使用Content-Security-Policy的frame-ancestors指令(详见下文)。
Nginx配置实战
基础配置方法
在Nginx配置文件中,通常在server块或location块中添加add_header指令:
server {
listen 80;
server_name example.com;
# X-Frame-Options配置
add_header X-Frame-Options "SAMEORIGIN" always;
location / {
root /var/www/html;
index index.html;
}
}
针对不同路径的不同策略
有时你可能需要对不同路径应用不同的X-Frame-Options策略:
server {
listen 80;
server_name example.com;
# 全局默认策略
add_header X-Frame-Options "SAMEORIGIN" always;
location /admin {
# 管理后台禁止嵌入
add_header X-Frame-Options "DENY" always;
# 其他配置...
}
location /public {
# 公开页面允许嵌入
# 不设置X-Frame-Options,或使用CSP
# ...
}
}
现代替代方案:Content-Security-Policy
由于X-Frame-Options的功能有限,现代网站更推荐使用Content-Security-Policy(CSP)的frame-ancestors指令。
CSP frame-ancestors配置
# 允许同源嵌入(等效于SAMEORIGIN)
add_header Content-Security-Policy "frame-ancestors 'self'" always;
# 允许指定域名嵌入
add_header Content-Security-Policy "frame-ancestors 'self' https://trusted.com" always;
# 完全禁止嵌入(等效于DENY)
add_header Content-Security-Policy "frame-ancestors 'none'" always;
常见问题与解决方法
1. add_header指令不生效
原因:
add_header在if块中可能被忽略- 多个
add_header指令存在覆盖问题
解决方法:使用always参数确保头部始终被添加。
相关内链推荐
如果你对Nginx安全配置感兴趣,还可以阅读以下文章:
- Nginx安全响应头配置详解:8个关键Header让你的网站固若金汤
- Nginx CORS跨域配置详解:从原理到实战的完整指南
- Nginx请求限流配置实战:limit_req防CC攻击与接口保护的完整指南
总结
X-Frame-Options是网站安全配置的重要组成部分,虽然功能相对简单,但能有效防止点击劫持攻击。对于新项目,建议直接使用CSP的frame-ancestors指令;对于现有项目,可以先配置X-Frame-Options,再逐步迁移到CSP。
配置时注意:
- 根据业务需求选择合适的指令(DENY/SAMEORIGIN)
- 使用
always参数确保头部始终被添加 - 配置后充分测试,避免影响现有功能
- 考虑同时配置CSP以提供更好的兼容性和功能性
通过正确配置X-Frame-Options,你可以显著提升网站的安全性,保护用户免受点击劫持等攻击。
版权声明
本文仅代表个人观点。
本文系AI辅助作者原创,未经许可,转载请保留原文链接。

发表评论