跳转到内容
主菜单
主菜单
移至侧栏
隐藏
导航
首页
最近更改
随机页面
MediaWiki帮助
代码酷
搜索
搜索
中文(中国大陆)
外观
创建账号
登录
个人工具
创建账号
登录
未登录编辑者的页面
了解详情
贡献
讨论
编辑“︁
JavaScript点击劫持(Clickjacking)
”︁
页面
讨论
大陆简体
阅读
编辑
编辑源代码
查看历史
工具
工具
移至侧栏
隐藏
操作
阅读
编辑
编辑源代码
查看历史
常规
链入页面
相关更改
特殊页面
页面信息
外观
移至侧栏
隐藏
您的更改会在有权核准的用户核准后向读者展示。
警告:
您没有登录。如果您进行任何编辑,您的IP地址会公开展示。如果您
登录
或
创建账号
,您的编辑会以您的用户名署名,此外还有其他益处。
反垃圾检查。
不要
加入这个!
= JavaScript点击劫持(Clickjacking) = '''点击劫持'''(Clickjacking)是一种恶意攻击技术,攻击者通过欺骗用户点击看似无害的页面元素,实际上却触发了隐藏的恶意操作。这种攻击通常利用透明或伪装的iframe覆盖在诱骗页面上,导致用户在不知情的情况下执行非预期的操作,如授权、转账或下载恶意软件。 == 攻击原理 == 点击劫持的核心是利用CSS和HTML的层叠特性,将目标页面(如银行网站或社交网络)嵌入到一个透明的iframe中,并覆盖在诱骗页面的按钮或链接上。当用户点击诱骗页面的可见元素时,实际上触发了隐藏iframe中的操作。 <mermaid> graph TD A[诱骗页面] --> B[透明iframe] B --> C[目标网站操作] D[用户点击] --> B </mermaid> == 示例代码 == 以下是一个简单的点击劫持攻击示例: <syntaxhighlight lang="html"> <!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> </syntaxhighlight> '''解释:''' * 用户看到的是一个绿色的按钮("点击赢取奖品!")。 * 实际上,一个透明的iframe覆盖在按钮上方,其`src`指向目标网站(如银行转账页面)。 * 当用户点击按钮时,实际触发的是iframe中的操作(如转账)。 == 防御措施 == 开发者可以通过以下方法防止点击劫持攻击: === 1. X-Frame-Options 响应头 === 服务器可以通过设置HTTP响应头禁止页面被嵌入iframe: <syntaxhighlight lang="http"> X-Frame-Options: DENY </syntaxhighlight> 或仅允许同源嵌入: <syntaxhighlight lang="http"> X-Frame-Options: SAMEORIGIN </syntaxhighlight> === 2. Content Security Policy (CSP) === 现代浏览器支持通过CSP限制iframe的加载: <syntaxhighlight lang="http"> Content-Security-Policy: frame-ancestors 'none' </syntaxhighlight> === 3. JavaScript防御(传统方法) === 如果旧浏览器不支持上述方法,可以使用JavaScript检测页面是否被嵌入: <syntaxhighlight lang="javascript"> if (window.top !== window.self) { window.top.location = window.self.location; } </syntaxhighlight> == 实际案例 == * '''Facebook (2009年)''':攻击者利用点击劫持传播恶意链接,导致用户 unknowingly "liked" 或分享了垃圾内容。 * '''银行攻击''':透明iframe覆盖在游戏页面上,诱使用户点击时实际确认了转账操作。 * '''广告欺诈''':伪造广告点击以生成虚假收入。 == 数学原理(可选) == 点击劫持的成功概率可以建模为: <math> P = \frac{A_{overlap}}{A_{visible}} </math> 其中: * <math>A_{overlap}</math> 是iframe与诱骗元素的重叠面积 * <math>A_{visible}</math> 是用户可见的可点击区域 == 总结 == 点击劫持是一种危险的UI欺骗攻击,开发者必须通过服务器端和客户端的双重防护来保护用户。现代浏览器已内置防御机制,但兼容旧系统时仍需JavaScript辅助检测。用户也应保持警惕,避免点击不明来源的诱人内容。 {{警告|重要:点击劫持防御是Web应用安全的基本要求,未防护的站点可能面临数据泄露和法律责任。}} [[Category:编程语言]] [[Category:JavaScript]] [[Category:Javascript安全]]
摘要:
请注意,所有对代码酷的贡献均被视为依照知识共享署名-非商业性使用-相同方式共享发表(详情请见
代码酷:著作权
)。如果您不希望您的文字作品被随意编辑和分发传播,请不要在此提交。
您同时也向我们承诺,您提交的内容为您自己所创作,或是复制自公共领域或类似自由来源。
未经许可,请勿提交受著作权保护的作品!
取消
编辑帮助
(在新窗口中打开)
该页面使用的模板:
模板:警告
(
编辑
)