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