如何在URL中添加鏈接時創建將重定向到自定義URL的PHP腳本。例如,當用戶訪問此:如何編寫PHP重定向腳本
http://mydomain.com/link.php?=http://www.google.com
它應該立即將它們重定向到谷歌。
理想情況下,是否可以確保點擊本身來自本地?
我知道這很可能是一個非常基本的PHP代碼,但請注意,我的知識是非常有限的,這限制了我寫它。
如何在URL中添加鏈接時創建將重定向到自定義URL的PHP腳本。例如,當用戶訪問此:如何編寫PHP重定向腳本
http://mydomain.com/link.php?=http://www.google.com
它應該立即將它們重定向到谷歌。
理想情況下,是否可以確保點擊本身來自本地?
我知道這很可能是一個非常基本的PHP代碼,但請注意,我的知識是非常有限的,這限制了我寫它。
您可以使用$ _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']);
}
http://mydomain.com/link.php?url=http://www.google.com
<?php
header("Location: {$_GET['url']}");
?>
This?
是否可以確保點擊本身來自本地? –
你是什麼意思? – MrSil
建議您可能希望以某種方式對URL進行編碼,以防止人們在變量中輸入他們想要的內容,然後在設置標題時將其解碼(如@ MrSil的答案) –
好的,我想在這裏添加完整的答案。
你可以使用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的更多信息。
這是一個很好的答案。出於好奇,這個劇本怎麼會被欺騙? –
另外,你可否在這裏添加標題重定向代碼,以便我可以接受這個答案是正確的。對不起,如果我感到困惑,但我不能看到** $ _ GET ['url'**部分在哪裏... –
請參閱http://stackoverflow.com/questions/3104647/how-to-spoof-http-referer – Prasanth
您能否在您的代碼中示範我如何使用$ _SERVER變量的HTTP_REFERER? –
在$ _SERVER中更改referer值將不會執行任何操作 - 客戶端的瀏覽器將獲取指定的url,並且引用者將成爲您的站點。你不能改變這一點。 –
@MarcB,他需要確保url是從同一個域中導航的。所以我建議使用變量$ _SERVER [「HTTP_REFERER」]來檢查引用域。 – Suriya