常见漏洞验证121 条

点击劫持防护检查

检查页面是否可用 iframe 嵌入且缺少 X-Frame-Options/frame-ancestors 限制;敏感操作页与登录页是重点。

点击劫持在防什么

点击劫持的原理是页面被透明的 iframe 覆盖,用户以为自己在点别处,实际点的是目标页面上的按钮。防护手段是两种响应头:X-Frame-Options(DENY 或 SAMEORIGIN)与 CSP 的 frame-ancestors 指令。检查重点在覆盖面:首页配了不代表登录页和支付页也配了,而这两个页面才是真正的目标。验证方式既可以是抓响应头,也可以自建一个页面尝试嵌入目标。

基本信息

响应头X-Frame-Options: DENY 或 SAMEORIGIN
CSP 指令frame-ancestors 'none' 或 'self'
验证方式抓取响应头 + 自建 HTML 尝试 iframe 嵌入
重点页面登录页、支付与转账页、授权确认页、管理后台
浏览器差异现代浏览器中 frame-ancestors 优先,旧版 IE 只认 X-Frame-Options

典型使用场景

  • Web 安全基线核查的常规项
  • 评估敏感操作页是否可被嵌入(登录、支付、授权)
  • 排查「页面上有未知 iframe」这类现象的反向风险
  • 为跨站脚本类问题提供纵深防御建议
  • 修复验证:确认响应头在全部敏感页面生效

检查步骤

检查步骤
# 1. 抓响应头,确认两种防护是否存在
curl -sI https://example.com/login | grep -Ei 'x-frame-options|content-security-policy'
# Windows PowerShell 可用 curl.exe 或 Invoke-WebRequest 的 Headers 属性
# 2. 无防护头时,自建页面在授权范围内验证嵌入(本地文件即可)
#    自建页面内容示例:<iframe src="https://example.com/login"></iframe>
# 3. 记录:页面 + 防护头现状 + 是否可嵌入

防护现状与判断

现状含义处置
两项都缺失可被任意站点嵌入列缺陷,建议全站统一策略
仅 X-Frame-Options: SAMEORIGIN同源可嵌入基本满足要求,可补充 frame-ancestors
CSP frame-ancestors 'none'完全禁止嵌入记录为良好实践
仅首页有防护敏感页面可能仍可嵌入逐个敏感页面核查后再下结论
修复视角:全站统一配置 frame-ancestors 策略;注意该指令在旧版浏览器不受支持,需要与 X-Frame-Options 并存以覆盖历史客户端。
注意 CSP 与 X-Frame-Options 并存时的行为差异:现代浏览器以 frame-ancestors 为准,两条策略互相矛盾时实际生效的是前者。

易错点

  • 只检查首页:登录、支付与后台页面才是点击劫持的实际目标,覆盖不足则结论无效
  • 忽略两个头并存时的差异:frame-ancestors 更严格时实际生效规则与旧头无关
  • 把同源嵌入一律判缺陷:业务上需要同源内嵌的页面要单独评估
  • 只用响应头判断不做嵌入验证:部分框架会在页面级别再限制,需要交叉确认

数据来源与参考

  • OWASP Cheat Sheet:Clickjacking Defense
  • MDN HTTP 响应头参考
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌