【发布时间】:2012-10-15 17:06:57
【问题描述】:
如何创建一个 PHP 脚本,以便在 URL 中添加链接时重定向到自定义 URL。例如,当用户访问这个时:
http://mydomain.com/link.php?=http://www.google.com
它应该立即将它们重定向到谷歌。
理想情况下,是否可以确保点击本身来自本地?
我知道这很可能是一个非常基本的 PHP 代码,但请注意,我对它的了解非常有限,这限制了我编写它。
【问题讨论】:
如何创建一个 PHP 脚本,以便在 URL 中添加链接时重定向到自定义 URL。例如,当用户访问这个时:
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
我希望以下内容对您有用,您可以将 $domain 变量硬编码为 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']}");
?>
这个?
【讨论】:
好的,我想在这里添加一个完整的答案。
您可以使用 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 的更多信息。
【讨论】: