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

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

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

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

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


person Peter    schedule 20.01.2009    source источник


Ответы (4)


Я считаю, что правильный современный метод достижения этого - использование X- Заголовок ответа Frame-Options.

Из MDN:

Заголовок HTTP-ответа X-Frame-Options может использоваться, чтобы указать, следует ли разрешить браузеру отображать страницу во фрейме или iframe. Сайты могут использовать это, чтобы избежать атак с использованием кликджекинга, гарантируя, что их контент не встроен в другие сайты.

Взгляните на: Как предотвратить запуск IFRAME перенаправление окна верхнего уровня

person Steven Lu    schedule 20.06.2013
comment
Это правильный ответ для 2017 года. У OWASP есть отличная Шпаргалка по защите от кликджекинга, в которой обсуждается возможности атаки и исправления. - person thirdender; 12.12.2017
comment
Я обновил выбранный ответ на свой старый вопрос, учитывая современные передовые практики. - person Peter; 13.12.2017

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

if (window != top) top.location.href = location.href; 
person Greg Hewgill    schedule 20.01.2009
comment
Это было бы неплохо, сайт взлома, пытающийся использовать iframe для вашего сайта, будет перенаправлен на ваш сайт в родительском окне :) - person Jobo; 20.01.2009
comment
вы также можете записать это как if(top !== self) top.location.href = self.location.href - то же самое, но более симметрично - person Christoph; 20.01.2009
comment
Есть обходные пути для многих из этих скриптов frame popper, поэтому их больше не следует использовать. См. OWASP Шпаргалка по защите от кликджекинга. > - person thirdender; 12.12.2017

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

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

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

person Lusid    schedule 20.01.2009

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

person Jobo    schedule 20.01.2009