Apache中配置X-Frame-Options防点击劫持最直接有效,需启用mod_headers模块,在VirtualHost或主配置中添加Header always set X-Frame-Options "SAMEORIGIN"(管理页可用"DENY"),禁用已废弃的ALLOW-FROM,并验证响应头生效。

在 Apache 中配置 X-Frame-Options 是防止点击劫持最直接有效的方式,核心是启用 mod_headers 模块并全局注入响应头。
确认并启用 headers 模块
该模块必须启用,否则 Header 指令无效:
- Debian/Ubuntu 系统执行:
a2enmod headers && systemctl restart apache2 - RHEL/CentOS 系统检查
/etc/httpd/conf.modules.d/00-base.conf中是否已启用:LoadModule headers_module modules/mod_headers.so - 配置完成后用
apache2ctl -M | grep headers或httpd -M | grep headers验证模块已加载
在合适位置添加 Header 指令
推荐在虚拟主机配置块(<virtualhost></virtualhost>)或主配置文件(如 /etc/apache2/apache2.conf)中设置,确保覆盖所有响应:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
- 最常用且稳妥的写法:
Header always set X-Frame-Options "SAMEORIGIN" - 若需完全禁止嵌套(如管理后台、登录页),改用:
Header always set X-Frame-Options "DENY" - 避免使用
ALLOW-FROM—— Chrome 79+ 和 Firefox 69+ 已废弃,多数现代浏览器忽略该值
注意反向代理场景
如果 Apache 作为反向代理(例如代理到 Node.js、PHP-FPM 或后端服务),默认会丢弃原始响应头:
- 需在
ProxyPass所在段落显式继承或重设:Header always set X-Frame-Options "SAMEORIGIN" - 不能依赖后端应用(如 PHP 的
header())单独设置,否则静态资源(JS/CSS/HTML)可能遗漏 - CDN 或负载均衡器也可能覆盖该头,需同步检查其配置
验证是否生效
配置保存后重启 Apache,再通过浏览器开发者工具或 curl -I https://yoursite.com 检查响应头:
- 应看到明确返回:
X-Frame-Options: SAMEORIGIN - 若未出现,常见原因是:模块未启用、指令写在错误作用域(如仅放在
<directory></directory>内)、被 .htaccess 覆盖、或被后端程序清除 - 可临时在页面中嵌入 iframe 测试:同域页面能正常加载,跨域 iframe 将被浏览器阻止并报错

















