2012-06-22 108 views
0

我有各種網站上的iframe。在我的JS中,我擊中了一個不同域中的PHP文件。有沒有辦法讓託管我的iframe的服務器的域名。 (這是爲了防止別人打我的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

編輯:

的OP想要做什麼,我最初解釋的問題作爲反向。

爲防止網站被訪問時,它是不是在一個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之外訪問,則空白(無)。


爲了防止從頁面時,它位於iframe(原來的答案,還是有用的)訪問。

您可以發送標頭X-Frame-Options: SAMEORIGIN(what Google does)以要求瀏覽器不在域中顯示的框架中顯示內容。

PHP

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

你可能還解決此用JavaScript停止通過I幀訪問網站:

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那裏,當您啓用CSP其他的含義。