跳转到内容

JavaScript点击劫持(Clickjacking)

来自代码酷

JavaScript点击劫持(Clickjacking)[编辑 | 编辑源代码]

点击劫持(Clickjacking)是一种恶意攻击技术,攻击者通过欺骗用户点击看似无害的页面元素,实际上却触发了隐藏的恶意操作。这种攻击通常利用透明或伪装的iframe覆盖在诱骗页面上,导致用户在不知情的情况下执行非预期的操作,如授权、转账或下载恶意软件。

攻击原理[编辑 | 编辑源代码]

点击劫持的核心是利用CSS和HTML的层叠特性,将目标页面(如银行网站或社交网络)嵌入到一个透明的iframe中,并覆盖在诱骗页面的按钮或链接上。当用户点击诱骗页面的可见元素时,实际上触发了隐藏iframe中的操作。

graph TD A[诱骗页面] --> B[透明iframe] B --> C[目标网站操作] D[用户点击] --> B

示例代码[编辑 | 编辑源代码]

以下是一个简单的点击劫持攻击示例:

<!DOCTYPE html>
<html>
<head>
    <title>诱骗页面</title>
    <style>
        #malicious-button {
            position: absolute;
            top: 100px;
            left: 100px;
            width: 200px;
            height: 50px;
            background-color: #4CAF50;
            color: white;
            text-align: center;
            line-height: 50px;
            cursor: pointer;
        }
        #hidden-iframe {
            position: absolute;
            top: 100px;
            left: 100px;
            width: 200px;
            height: 50px;
            opacity: 0.01;
            z-index: 2;
        }
    </style>
</head>
<body>
    <div id="malicious-button">点击赢取奖品!</div>
    <iframe id="hidden-iframe" src="https://victim-site.com/transfer-money?amount=1000&to=attacker"></iframe>
</body>
</html>

解释:

  • 用户看到的是一个绿色的按钮("点击赢取奖品!")。
  • 实际上,一个透明的iframe覆盖在按钮上方,其`src`指向目标网站(如银行转账页面)。
  • 当用户点击按钮时,实际触发的是iframe中的操作(如转账)。

防御措施[编辑 | 编辑源代码]

开发者可以通过以下方法防止点击劫持攻击:

1. X-Frame-Options 响应头[编辑 | 编辑源代码]

服务器可以通过设置HTTP响应头禁止页面被嵌入iframe:

X-Frame-Options: DENY

或仅允许同源嵌入:

X-Frame-Options: SAMEORIGIN

2. Content Security Policy (CSP)[编辑 | 编辑源代码]

现代浏览器支持通过CSP限制iframe的加载:

Content-Security-Policy: frame-ancestors 'none'

3. JavaScript防御(传统方法)[编辑 | 编辑源代码]

如果旧浏览器不支持上述方法,可以使用JavaScript检测页面是否被嵌入:

if (window.top !== window.self) {
    window.top.location = window.self.location;
}

实际案例[编辑 | 编辑源代码]

  • Facebook (2009年):攻击者利用点击劫持传播恶意链接,导致用户 unknowingly "liked" 或分享了垃圾内容。
  • 银行攻击:透明iframe覆盖在游戏页面上,诱使用户点击时实际确认了转账操作。
  • 广告欺诈:伪造广告点击以生成虚假收入。

数学原理(可选)[编辑 | 编辑源代码]

点击劫持的成功概率可以建模为:

P=AoverlapAvisible

其中:

  • Aoverlap 是iframe与诱骗元素的重叠面积
  • Avisible 是用户可见的可点击区域

总结[编辑 | 编辑源代码]

点击劫持是一种危险的UI欺骗攻击,开发者必须通过服务器端和客户端的双重防护来保护用户。现代浏览器已内置防御机制,但兼容旧系统时仍需JavaScript辅助检测。用户也应保持警惕,避免点击不明来源的诱人内容。

模板:警告