Недавно у нас возникла проблема, когда другие сайты запускают наш сайт электронной коммерции внутри набора фреймов, где наш сайт (с прикрепленным идентификатором партнера нарушителей) является единственным контентом в одном фрейме полной ширины. По сути, это выглядит как наш сайт с URL-адресом вверху. Мы можем отключить их партнерский идентификатор, что сделало бы их бессмысленными, но это не мешает будущим нарушителям делать то же самое, пока мы не узнаем об этом.
Есть ли общий способ (возможно, с помощью JavaScript, который появляется на каждой странице?), Чтобы этого не произошло? Обратите внимание, что добавление целей ко всем ссылкам невозможно, но добавление фрагмента JS ко всем страницам возможно, поскольку части верхнего и нижнего колонтитулов являются общими для всего сайта из одного источника.
Другая возможность - на уровне Apache (если есть что-то, что мы могли бы сделать на стороне сервера), поскольку мы передаем все запросы через мод-перезапись.
Обратите внимание, что было бы важно разрешить загрузку страниц внутри IFrame, если родительская страница происходит из нашего домена, так как мы корректно используем IFrames.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Просто догадываюсь ... но что, если вы используете javascript для вызова родительского окна для доступа к его объекту документа? Вы можете проверить, не является ли оно нулевым, и если есть родительское окно (то есть фрейм, загруженный на ваш сайт), вы можете скрыть весь свой html через javascript ...
Взгляните на эту статью. Он предлагает довольно простое решение для обнаружения фреймов и выхода из них.
Как выйти за рамки с помощью JavaScript
Кроме того, я бы пошел еще дальше. Каждый раз, когда вы обнаруживаете фрейм, возьмите партнерский идентификатор разработчика сайта-нарушителя и отправьте его на сервер с помощью AJAX вместе с URL-адресом, который они используют. Затем, автоматически или вручную, вы можете проверить, создают ли они ваш сайт, и поочередно отменить их партнерский код.
Я слышал, что решения этой проблемы называются «скриптом всплывающего кадра». Быстрый гугл предлагает эта ветка. Похоже, это один из самых простых:
if (window != top) top.location.href = location.href;
вы также можете записать это как if (top !== self) top.location.href = self.location.href - то же самое, но более симметрично
Есть обходные пути для многих из этих "сценариев всплывающего окна", поэтому их больше не следует использовать. См. OWASP Шпаргалка по защите от Clickjacking: небезопасные неработающие скрипты НЕ ИСПОЛЬЗУЙТЕ
Я считаю, что правильный современный метод достижения этого - Заголовок ответа X-Frame-Options.
Из MDN:
The X-Frame-Options HTTP response header can be used to indicate whether or not a browser should be allowed to render a page in a frame or iframe. Sites can use this to avoid clickjacking attacks, by ensuring that their content is not embedded into other sites.
Взгляните на: Как запретить IFRAME перенаправлять окно верхнего уровня
Это правильный ответ для 2017 года. У OWASP есть отличный Памятка по защите от Clickjacking, в котором обсуждаются возможности атаки и исправления.
Я обновил выбранный ответ на свой старый вопрос, учитывая современные передовые практики.
Это было бы неплохо, сайт взлома, пытающийся использовать iframe для вашего сайта, будет перенаправлен на ваш сайт в родительском окне :)