Как предотвратить IFraming с белым списком - PullRequest
0 голосов
/ 03 декабря 2009

Я создаю некоторый контент IFrameable. Мы хотим, чтобы пользователь мог вставлять эту страницу в IFrame, но только из заданного списка доменов.

Есть ли что-нибудь, что мы можем проверить, чтобы увидеть, каково доменное имя родительской страницы?

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

Ответы [ 3 ]

2 голосов
/ 03 декабря 2009

Как сказал Бобинс, document.referrer выглядит вашим лучшим выбором. Вы можете проверить это на странице, которая будет являться источником iFrame. Однако информация HTTP-реферера может быть легко подделана, поэтому этот метод не очень безопасен.

В этой статье показано, как это сделать с помощью PHP: Как обойти проверку безопасности REFERER

2 голосов
/ 03 декабря 2009

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

Ограничение frame-ancestors в Политике безопасности контента может однажды разрешить это.

1 голос
/ 15 мая 2015

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

var currentUrl = document.referrer;
var okayUrl = "http://good-domain.com";
var okayUrl2 = "http://another-good-domain.com";

//check if page is loaded in iframe
if ( window.location !== window.parent.location ) {
    //check if parent is a whitelisted domain
    if (currentUrl == okayUrl || currentUrl == okayUrl2)
    {
     //if it is a good domain, then just log the parent url or something
     console.log(currentUrl);
     } else {
     //if it is a bad domain, then do something about it
     alert ("Woah buddy. Can't touch this!");
     window.location = "http://en.wikipedia.org/wiki/Rickrolling";
   }
}
...