2012-10-15 124 views
0

如何在URL中添加鏈接時創建將重定向到自定義URL的PHP​​腳本。例如,當用戶訪問此:如何編寫PHP重定向腳本

http://mydomain.com/link.php?=http://www.google.com 

它應該立即將它們重定向到谷歌。

理想情況下,是否可以確保點擊本身來自本地?

我知道這很可能是一個非常基本的PHP代碼,但請注意,我的知識是非常有限的,這限制了我寫它。

回答

2

您可以使用$ _SERVER變量的HTTP_REFERER來檢查它是否來自本地域。

參考:http://php.net/manual/en/reserved.variables.server.php

重定向,請嘗試使用下面的

http://mydomain.com/link.php?r=http://www.google.com 
header("Location:".$_GET['r']); 

參考:http://in3.php.net/manual/en/function.header.php

我希望爲您提供以下作品,你可以硬編碼$域變量作爲MYDOMAIN .com

$url = "http://www.php.net/index.html"; 
$domain = str_ireplace('www.', '', parse_url($url, PHP_URL_HOST)); 
$refDomain = str_ireplace('www.', '', parse_url($_SERVER["HTTP_REFERER"], PHP_URL_HOST)); 

if(strcmp($domain, $refDomain) == 0) 
{ 
    //your code goes here 
    header("Location:".$_GET['r']); 
} 
+0

您能否在您的代碼中示範我如何使用$ _SERVER變量的HTTP_REFERER? –

+0

在$ _SERVER中更改referer值將不會執行任何操作 - 客戶端的瀏覽器將獲取指定的url,並且引用者將成爲您的站點。你不能改變這一點。 –

+0

@MarcB,他需要確保url是從同一個域中導航的。所以我建議使用變量$ _SERVER [「HTTP_REFERER」]來檢查引用域。 – Suriya

2
http://mydomain.com/link.php?url=http://www.google.com 

<?php 
header("Location: {$_GET['url']}"); 
?> 

This?

+1

是否可以確保點擊本身來自本地? –

+0

你是什麼意思? – MrSil

+1

建議您可能希望以某種方式對URL進行編碼,以防止人們在變量中輸入他們想要的內容,然後在設置標題時將其解碼(如@ MrSil的答案) –

0

好的,我想在這裏添加完整的答案。

你可以使用header像MrSil說要送一個重定向頭,

header("Location: $url"); // will redirect to $url! 

如果你想防止他人使用您的重定向腳本,你可以這樣做:

$ref = $_SERVER['HTTP_REFERER']; 
$host = parse_url($ref, PHP_URL_HOST); 
if($host !== "mydomain.com"){ 
    // out side request 
} 

但是,HTTP_REFERER可能很容易被欺騙。那麼,什麼是更好的檢查?

CSRF保護。它可能看起來像矯枉過正,也是不是完美方式做這個東西,但它有幫助。

此外,我不認爲有一個完美的解決方案。

閱讀this以獲取有關CSRF的更多信息。

+0

這是一個很好的答案。出於好奇,這個劇本怎麼會被欺騙? –

+0

另外,你可否在這裏添加標題重定向代碼,以便我可以接受這個答案是正確的。對不起,如果我感到困惑,但我不能看到** $ _ GET ['url'**部分在哪裏... –

+0

請參閱http://stackoverflow.com/questions/3104647/how-to-spoof-http-referer – Prasanth