2012-06-22 3 views
0

У меня есть iframes над различными веб-сайтами. В моем js я атакую ​​php-файл в другом домене. Есть ли способ получить доменное имя для сервера, на котором размещены мои iframes. (Это делается для того, чтобы другие люди не попадали на мой php-файл).Удаленный хост iframe

Пример. У меня есть домен под названием www.domain.com и еще один звонок www.phpscript.com Если мой сайт занесен в yahoo. Есть ли способ узнать, что мои js-звонки идут от www.domain.com, а не от какого-нибудь изворотливого веб-сайта?

$_SERVER['REMOTE_HOST'] и $_SERVER['REMOTE_ADDR'] не будет работать в этой ситуации, как REMOTE_ADDR бы предоставить пользователям IP и REMOTE_HOST вернутся yahoo.

+0

Существует только HTTP-референт, который не всегда доступен, и определенно никогда не бывает надежным. –

+0

Это проблема, она не была бы достаточно надежной :(и не будет ли она возвращать 'yahoo'? – Bankzilla

ответ

0

EDIT:

ОП хотел сделать обратное тому, что я изначально интерпретировал вопрос.

Чтобы предотвратить сайт осуществляется доступ, когда он НЕ в IFRAME, вы можете использовать:

<script type="text/javascript"> 
if (window.top === window.self) { 

    window.self.location = 'about:blank'; 
    window.self.onload=function(evt){ 
     window.self.location = 'about:blank'; 
     document.body.innerHTML=''; 
    }; 
    document.body.innerHTML=''; 
} 
</script> 

Это требует JavaScript должен быть включен, и будет пустой страницы и перенаправлять о: пусто (ничего), если страница доступна за пределами iframe.


Для предотвращения страницы от несанкционированного доступа, когда он IS в IFrame (оригинальный ответ, по-прежнему полезно).

Вы можете отправить заголовок X-Frame-Options: SAMEORIGIN(what Google does), чтобы попросить браузер не отображать содержимое в кадре, который отсутствует в вашем домене.

PHP

header('X-XSS-Protection: 1; mode=block'); 
header('X-Frame-Options: SAMEORIGIN'); 

Вы можете дополнительно работать вокруг этого с JavaScript, чтобы остановить доступ к сайту через фреймов:

if (window.top !== window.self) { 
    window.self.location = 'about:blank'; 
    window.self.onload=function(evt){ 
     window.self.location = 'about:blank'; 
     document.body.innerHTML=''; 
    }; 
    document.body.innerHTML=''; 
} 

Оба метода опираются на поддержку браузера, но это лучше чем ничего.

+0

Сайт построен вокруг использования в iframe. Как и видеоплеер. Таким образом, блокировка iframe не является решение. – Bankzilla

+0

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

+0

Имеет все необходимые теги html и видеопроигрыватель + его компоненты. – Bankzilla

2

Если вы хотите разрешить взаимодействие через фреймы, но только в пределах подмножества доменов, то вам понадобится расширение Content Security Protection. В настоящее время это реализовано только в Firefox и Chrome (не MISE, не знаю о Safari и Opera и т. Д.), Но это стандарт w3c, поэтому ожидайте, что все присоединятся в конечном итоге.

Поэтому для PHP скрипта на Example.com запущенных разрешений доступа от other.com (или наоборот) ....

$ok="'self',*.other.com,*.example.com"; 
$policy="default-src $ok; frame-ancestors: $ok"; 
header("X-Content-Security-Policy: $policy"); 
header("X-Webkit-CSP: $policy"); 
header("Content-Security-Policy: $policy"); 

NB Есть и другие последствия, когда вы включите ПЕС.