Есть ли возможность определить, загружается ли моя страница со страницы кликджекинга?
Я имею в виду, не имеет значения, является ли страница источником кликджекинга (я установил заголовок X-FRAME-OPTIONS), дело в том, переходят ли пользователи со страницы с кликджеками на мою страницу.
Первое решение, которое я нашел, — это управление HTTP-REFERER, но это тяжелая работа, потому что я не могу контролировать весь свой трафик.
Извините за мой английский.
Если вы не хотите, чтобы внешние сайты могли отправлять POST на ваш сайт, если у вас есть запрос POST, исходящий с другого сервера, это, вероятно, щелчок:
if($_SERVER['REQUEST_METHOD'] == 'POST' && !strstr($_SERVER['HTTP_REFERER'], 'mydomain.com') {
//probably clickjacking
}
Если у вас есть страницы, использующие GET, которые восприимчивы к перехвату кликов, вы можете либо добавить проверку HTTP_REFERER для каждой страницы, либо изменить страницу на использование POST (что обычно лучше всего подходит для обновления).
Один из вариантов — установить заголовок веб-сайта: «X-Frames-Options» на «SAMEORIGIN».
Это должно предотвратить загрузку вашего сайта в фреймы и фреймы, если исходная страница не находится в вашем домене.
Обратите внимание, что это будет работать только для определенных браузеров, например, я не думаю, что это будет работать с IE7 и ниже, и я не думаю, что это работает с Chrome. Это по крайней мере немного уменьшит вашу поверхность атаки.
Apache:
Заголовок всегда добавляет X-Frame-Options SAMEORIGIN
MDN — заголовок ответа X-Frame-Options
РЕДАКТИРОВАТЬ: Теперь, когда я понимаю лучше …
Возможно, вы можете использовать код, похожий на этот:
if (window.top !== window.self) {
// do something here
}
Это один из способов определить, загружена ли страница в iframe. Вы можете установить здесь cookie, вызвать WebService здесь или использовать window.location.href для навигации.
Вот пример защиты от разрушения фрейма при щелчке:
Кликджекинг защита
-KB