0

如何在 URL 中添加链接时创建将重定向到自定义 URL 的 PHP 脚本。例如,当用户访问此内容时:

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

它应该立即将它们重定向到谷歌。

理想情况下,是否可以确保点击本身来自本地?

我知道这很可能是一个非常基本的 PHP 代码,但请注意,我对它的了解非常有限,这限制了我编写它。

4

3 回答 3

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

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

这个?

于 2012-10-15T17:09:13.730 回答
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

我希望以下内容对您有用,您可以将 $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']);
}
于 2012-10-15T17:12:47.040 回答
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保护。它可能看起来有点矫枉过正,而且它也不是做这些事情的完美方式,但它有帮助。

另外,我认为不存在完美的解决方案。

阅读本文以获取有关 CSRF 的更多信息。

于 2012-10-15T17:27:04.220 回答