如何在 URL 中添加链接时创建将重定向到自定义 URL 的 PHP 脚本。例如,当用户访问此内容时:
http://mydomain.com/link.php?=http://www.google.com
它应该立即将它们重定向到谷歌。
理想情况下,是否可以确保点击本身来自本地?
我知道这很可能是一个非常基本的 PHP 代码,但请注意,我对它的了解非常有限,这限制了我编写它。
http://mydomain.com/link.php?url=http://www.google.com
<?php
header("Location: {$_GET['url']}");
?>
这个?
您可以使用 $_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']);
}
好的,我想在这里添加一个完整的答案。
您可以使用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 的更多信息。