JavaScript - 点击劫持攻击



点击劫持攻击

点击劫持是一种网络攻击形式,攻击者利用它欺骗用户点击他们感知到的不同对象;这种欺骗可能导致意外操作。攻击者通过在有效内容上覆盖不可见的元素或框架来实现这一点,从而伪装恶意意图或直接操纵网页元素的外观。

点击劫持会导致严重的风险,例如未经授权的金融交易、潜在的数据泄露以及敏感信息的泄露。点击劫持会影响用户和网站所有者,导致法律后果、经济损失和日益严重的网络安全问题。点击劫持的欺骗性性质可能会损害用户信任,并在数字生态系统中产生深远的影响。

免责声明:本章内容仅供教育目的!

点击劫持是如何运作的?

覆盖内容

  • 攻击者创建恶意/垃圾邮件/诈骗网站,或将恶意代码注入实际上是合法性质的网站。

  • 攻击者将不可见的元素或框架放置在页面上的合法内容之上。这些元素可以是透明的 iframe 或其他 HTML 元素。

欺骗性呈现

  • 然后,攻击者诱使用户与页面上的可见元素交互,这些元素通常是按钮、链接或表单。

  • 但是,这些可见元素实际上位于不可见的恶意元素之上。

用户交互

  • 当用户与可见元素交互(点击、输入等)时,他们不知不觉地与隐藏的恶意元素交互,这些元素覆盖在合法内容之上。

意外操作

  • 攻击者可以操纵隐藏的元素,代表用户执行意外操作。这可能包括进行不必要的交易、更改帐户设置,甚至提交敏感信息。

用户不知情

  • 因为用户认为他们正在与看到的可见元素交互,所以他们不知道自己的操作被重定向以执行恶意活动。

示例

示例 1:按钮覆盖

提供的 HTML 代码演示了一个按钮覆盖点击劫持示例。按钮呈现给用户,但实际上它覆盖在一个隐藏的恶意 iframe 上,导致用户进入一个可能存在危害的页面。

home.html

<!DOCTYPE html>
<html>
<body>
   <h2>This is content of the home page</h2>
      <iframe src="legitimate-site.html" width="100%" height="100%"></iframe>
   <div>
   <button onclick="window.location.href='malicious-site.html'">Click Me</button>
   </div>
</body>
</html>

legitimate-site.html

<!DOCTYPE html>
<html>
<body>
   <header>
      <h1>Welcome to Legitimate Site</h1>
   </header>
   <section>
      <p>This is a legitimate website. You can trust the content here.</p>
   </section>
   <footer>
      <p>© 2024 Legitimate Site. All rights reserved.</p>
   </footer>
</body>
</html>

malicious-site.html

<!DOCTYPE html>
<html>
<head>
   <style>
      body {
         font-family: Arial, sans-serif;
      }
      .danger-sign {
         color: red;
         font-size: 2em;
      }
      .warning-message {
         color: red;
         font-weight: bold;
      }
   </style>
</head>
<body>
   <header>
      <h1 class="danger-sign">⚠️ Danger: Malicious Site</h1>
   </header>
   <section>
      <p class="warning-message">This website has been identified as potentially harmful. Visiting it may pose a security risk to your computer and personal information.</p>
   </section>
   <footer>
      <p>Please close this page immediately and do not proceed.</p>
   </footer>
</body>
</html>

输出

Clickjacking Attack

示例 2

在本示例中,当网页加载时,它会自动点击一个名为“clickMe”的按钮。当此特定按钮通过点击接收用户交互时,它会触发一个 JavaScript 事件,该事件将用户重定向到一个名为“malicious-site.html”的潜在有害站点。这种隐蔽的操作令人不安地引导用户前往他们不知情且未经同意的目的地。请务必注意:这些做法确实具有潜在的危害性和不道德性;人们必须以负责任的态度,并在法律和道德的范围内处理它们。

malicious-site.html 代码与上面相同。

home.html

<!DOCTYPE html>
<html>
<head>
   <style>
      body {
         display: flex;
         align-items: center;
         justify-content: center;
         height: 100vh;
         margin: 0;
      }

      button {
         position: absolute;
         z-index: 1;
         background-color: transparent;
         border: none;
         font-size: 20px;
         cursor: pointer;
      }
   </style>
</head>
<body onload="myFunction()">
   <h2>Your Content Goes Here</h2>
   <button id="clickMe">Click Me</button>
   <script>
      window.onload = function() {
         var button = document.getElementById("clickMe");
         button.click();
      };
      document.getElementById("clickMe").addEventListener("click", function() {
         window.location.href = "malicious-site.html";
      });
   </script>
</body>
</html>

输出

Clickjacking Attack

现实世界中的点击劫持事件

1. Facebook“赞”按钮 (2011)

攻击者在诱人的视频缩略图上覆盖了一个恶意的“赞”按钮,欺骗用户不知不觉地喜欢了一个恶意的页面。

2. Adobe Flash 更新诈骗 (2015)

伪装成 Adobe Flash 更新的恶意按钮覆盖在合法网站上,导致用户在不知情的情况下下载恶意软件。

3. Twitter 点击劫持攻击

Twitter 上伪装成诱人内容的恶意链接导致用户无意中转发和传播恶意内容。

4. LinkedIn 虚假连接请求

点击劫持被用来欺骗 LinkedIn 用户与虚假个人资料建立连接,方法是在看似无害的内容上覆盖连接请求按钮。

5. Google Play 商店欺骗

Google Play 商店上的恶意覆盖导致用户进行意外下载或操作,通常与广告相关。

预防措施

1. X-Frame-Options 标头

在 Web 服务器的响应中将 X-Frame-Options 标头设置为 DENY 或 SAMEORIGIN,以防止您的站点嵌入在 iframe 中。

2. 防范框架脚本

在您的网页中实现防范框架脚本,以防止它们嵌入在 iframe 中。

3. 内容安全策略 (CSP)

使用内容安全策略标头来控制您的网站可以加载内容的来源,从而降低点击劫持的风险。

4. 用户教育

教育用户了解与交互不熟悉或可疑内容相关的潜在风险。

随着网络安全的发展,点击劫持的未来趋势可能包括利用人工智能的更复杂技术、增加社会工程战术的使用,以及重点绕过高级安全措施。此外,随着增强现实(AR)和虚拟现实(VR)等新兴技术的兴起,沉浸式点击劫持体验的新途径可能会出现,这要求防御策略和用户意识不断创新。

广告