如何防范点击劫持攻击?

点击劫持是一种通过视觉欺骗诱导用户操作恶意元素的攻击。主要防御措施包括设置 HTTP 响应头、JavaScript 检测和用户教育。

前端安全 中等 安全 防护机制 HTTP头

点击劫持(Clickjacking)是一种通过视觉欺骗诱导用户在不知情时操作恶意元素的攻击,主要防御措施分为技术层和用户教育层:

一、技术防御措施

  1. 设置 HTTP 响应头
    • X-Frame-Options:通过该头部禁止页面被嵌入到 iframe。常用值:
      • DENY:禁止所有域名嵌套(最安全)
      • SAMEORIGIN:仅允许同源站点嵌套
        # Nginx 配置示例
        add_header X-Frame-Options "DENY" always;
        
    • Content-Security-Policy (CSP):使用 frame-ancestors 指令精细化控制嵌入源,优先级高于 X-Frame-Options
      # 禁止任何嵌套
      add_header Content-Security-Policy "frame-ancestors 'none';";  
      # 仅允许同源嵌套
      add_header Content-Security-Policy "frame-ancestors 'self';";  
      
  2. JavaScript Frame Busting
    在页面脚本中检测并阻止被嵌套:
    if (window.self !== window.top) {
      window.top.location.href = window.self.location.href; // 强制跳出 iframe
    }
    

    ⚠️ 注意:该方法可能被攻击者通过 sandbox 属性绕过,故建议作为备用方案。


二、用户层辅助措施

  1. 可视化确认机制
    在敏感操作(如支付、修改密码)时要求用户二次确认(例如拖拽验证码、输入短信验证码)。
  2. 用户安全习惯教育
    • 提示用户避免点击可疑来源链接
    • 教导识别异常页面特征(如透明覆盖层)

💎 最佳实践总结

优先组合使用 HTTP 响应头和 CSP,关键操作结合用户验证,代码示例如下:

# Nginx 主防护配置
add_header X-Frame-Options "DENY";
add_header Content-Security-Policy "frame-ancestors 'none';";  

此策略平衡兼容性与安全性,覆盖多数现代浏览器场景。