Можно ли запретить запуск нашего веб-сайта внутри набора фреймов или IFrame другого домена?

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

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

Другая возможность - на уровне Apache (если есть что-то, что мы могли бы сделать на стороне сервера), поскольку мы передаем все запросы через мод-перезапись.

Обратите внимание, что было бы важно разрешить загрузку страниц внутри IFrame, если родительская страница происходит из нашего домена, так как мы корректно используем IFrames.

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
6
0
2 907
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Просто догадываюсь ... но что, если вы используете javascript для вызова родительского окна для доступа к его объекту документа? Вы можете проверить, не является ли оно нулевым, и если есть родительское окно (то есть фрейм, загруженный на ваш сайт), вы можете скрыть весь свой html через javascript ...

Взгляните на эту статью. Он предлагает довольно простое решение для обнаружения фреймов и выхода из них.

Как выйти за рамки с помощью JavaScript

Кроме того, я бы пошел еще дальше. Каждый раз, когда вы обнаруживаете фрейм, возьмите партнерский идентификатор разработчика сайта-нарушителя и отправьте его на сервер с помощью AJAX вместе с URL-адресом, который они используют. Затем, автоматически или вручную, вы можете проверить, создают ли они ваш сайт, и поочередно отменить их партнерский код.

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

if (window != top) top.location.href = location.href; 

Это было бы неплохо, сайт взлома, пытающийся использовать iframe для вашего сайта, будет перенаправлен на ваш сайт в родительском окне :)

Jobo 20.01.2009 04:30

вы также можете записать это как if (top !== self) top.location.href = self.location.href - то же самое, но более симметрично

Christoph 20.01.2009 04:50

Есть обходные пути для многих из этих "сценариев всплывающего окна", поэтому их больше не следует использовать. См. OWASP Шпаргалка по защите от Clickjacking: небезопасные неработающие скрипты НЕ ИСПОЛЬЗУЙТЕ

thirdender 12.12.2017 19:36
Ответ принят как подходящий

Я считаю, что правильный современный метод достижения этого - Заголовок ответа 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, в котором обсуждаются возможности атаки и исправления.

thirdender 12.12.2017 19:35

Я обновил выбранный ответ на свой старый вопрос, учитывая современные передовые практики.

Peter 13.12.2017 02:09

Другие вопросы по теме