Предотвращение встраивания IFRAME, но с одним исключением - PullRequest
1 голос
/ 24 декабря 2010

Допустим, у нас есть веб-страница в данном месте (например, www.foo.com/page1.html), и эта страница содержит этот (глобальный) код:

if (self != top) {
    top.location.replace(location.href);
}

Итак, если мы попытаемся загрузить эту страницу в IFRAME, страница «выпрыгнет» из iframe в окно браузера, что (как следствие) уничтожит страницу, содержащую iframe.

Это нормально, но я бы хотел реализовать исключение из этого правила. В частности, эта другая страница находится в другом домене (например, www.bar.com/page2.html), и я хотел бы, чтобы эта другая страница могла встраивать первую страницу через IFRAME.

Как мне изменить код первой страницы, чтобы он мог быть встроен в другую страницу?

Это нормально?

if (self != top && top.location.href !== "http://www.bar.com/page2.html") {
    top.location.replace(location.href);
}

Ответы [ 2 ]

3 голосов
/ 24 декабря 2010

Я сомневаюсь, что вы сможете проверить URL-адрес внешней родительской страницы, потому что Одинаковая политика происхождения должна препятствовать доступу к любому из ее свойств.

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

Если реферером является http://www.bar.com/page2.html, то страница находится либо в iframe на этой странице, либо на нее ссылается (что является единственным действительно большим недостатком этого метода:На 100% уверен, что это входящая ссылка или встроенный фрейм).

Очевидно, что реферер документа подделан клиентом, но я не думаю, что это проблема здесь.

1 голос
/ 24 декабря 2010

Если вы передадите HTTP-заголовок X-FRAME-OPTIONS со значением SAMEORIGIN, большинство современных браузеров (включая IE8) не разрешат создание контента из чужого домена.

Я подумал, что это может помочь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...