快捷搜索:   服务器  PHP  安全  IIS  linux 安全

网站外链通过本站域名跳转访问并记录跳转链接 来源 时间 IP的方法

对于经常在自己网站发布外链链接的站长,经常为了避免权重流失会设置成外链通过本站的一个接口文件跳转访问,但是访客访问了哪些域名,这里就没法记录,因此我们提供这份源代码,既可以跳转访问,又可以记录被访问的网址

代码一:记录被访问的目标URL信息

<?
$url = $_GET['url'];
$file = "url.txt";
$handle =fopen($file,'a'); 
fwrite($handle,"\r\n"); 
fwrite($handle,"URL:");
fwrite($handle,"$url"); 
fclose($handele);
header("location: $url");
?>

将以上命名为url.php或者你自己喜欢的文件名。然后外链通过这种方式访问https://www.bnxb.com/url.php?url=www.baidu.com  

然后你的网站根目录下就会生成一个url.txt的文件,里面记录了所有被访问过的外链链接,按顺序排列


当然为了服务器性能,是不建议继续往这个跳转功能里面加参数的,但是有时候为了记录更多信息,比如访客的IP,访问时间,还需要继续往下添加内容

详见下面代码:

代码二:记录被访问的目标URL信息、访客真实IP、访问时间

<?
function get_real_ip(){
if(getenv('HTTP_CLIENT_IP') && strcasecmp(getenv('HTTP_CLIENT_IP'), 'unknown'))
{$ip = getenv('HTTP_CLIENT_IP');}
elseif(getenv('HTTP_X_FORWARDED_FOR') && strcasecmp(getenv('HTTP_X_FORWARDED_FOR'), 'unknown'))
{$ip = getenv('HTTP_X_FORWARDED_FOR');}
elseif(getenv('REMOTE_ADDR') && strcasecmp(getenv('REMOTE_ADDR'), 'unknown'))
{$ip = getenv('REMOTE_ADDR');}
elseif(isset($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] && strcasecmp($_SERVER['REMOTE_ADDR'], 'unknown'))
{$ip = $_SERVER['REMOTE_ADDR'];}
return preg_match("/[\d\.]{7,15}/", $ip, $matches) ? $matches[0] : false;
}

$url = $_GET['url'];
$date = date('Y-m-d H:i:s');
$file = "url.txt";
$ip = get_real_ip();

$handle =fopen($file,'a'); 
fwrite($handle,"\r\n"); 
fwrite($handle,"URL:");
fwrite($handle,"$url" . ","); 
fwrite($handle,"DATE:");
fwrite($handle,"$date" . ","); 
fwrite($handle,"IP:");
fwrite($handle,"$ip"); 
fclose($handele);
header("location: $url");
?>

这里定义了一个function方法,用于获取访客的真实IP,这里会对挂代理的情况进行判断,直到判断出真实IP,具体原理看这里https://www.bnxb.com/php/27000.html

一般我们是不建议在跳转的PHP放这么多东西,会影响效率


代码三:记录被访问的目标URL信息、访客IP(精简代码,可能是代理IP)、访问时间

如果不考虑访客使用代理的情况,那可以使用这个代码


<?

$url = $_GET['url'];
$date = date('Y-m-d H:i:s');
$file = "url.txt";
$ip = $_SERVER['REMOTE_ADDR'];

$handle =fopen($file,'a'); 
fwrite($handle,"\r\n"); 
fwrite($handle,"URL:");
fwrite($handle,"$url" . ","); 
fwrite($handle,"DATE:");
fwrite($handle,"$date" . ","); 
fwrite($handle,"IP:");
fwrite($handle,"$ip"); 
fclose($handele);
header("location: $url");
?>

代码四:记录被访问的目标URL信息、访客IP(精简代码,可能是代理IP)、来源页面、访问时间

<?
$url = $_GET['url'];
$referer = $_SERVER['HTTP_REFERER'];
$date = date('Y-m-d H:i:s');
$file = "url.txt";
$ip = $_SERVER['REMOTE_ADDR'];
$handle =fopen($file,'a'); 
fwrite($handle,"\r\n"); 
fwrite($handle,"URL:");
fwrite($handle,"$url" . ",  "); 
fwrite($handle,"ref:");
fwrite($handle,"$referer" . ",  "); 
fwrite($handle,"DATE:");
fwrite($handle,"$date" . ",  "); 
fwrite($handle,"IP:");
fwrite($handle,"$ip"); 
fclose($handele);
header("location: $url");
?>


代码五:记录被访问的目标URL信息、访客IP(精简代码,可能是代理IP)、来源页面、访问时间,并防止被人站外调用

这样制作的跳转文件,谁拿了都能拿去套着用,比如现在有人经常会在QQ群发违法链接,QQ会提示风险,但是如果对方套上你的这个链接再去发就不会有这个提示,这样虽然你能通过记录查到有人用这种方式在利用你的跳转链接,但是你也没办法,这里再提供一个办法。

就是在跳转之前,先判断一次点击的来路,如果来路是来自你的域名,那就允许跳转,否则就终止,通过QQ直接发链接,是读取不到来路的,因此就能防止这种被利用的情况发生。


<?
$url = $_GET['url'];
$fromurl="https://www.bnxb.com/"; //定义一个返回网址
$referer = $_SERVER['HTTP_REFERER'];
$arr2 = parse_url($referer);
$host2 = $arr2['host'];
if(strpos($host2,'bnxb.com') == false) //域名中没包括bnxb.com字眼的话,就执行下面步骤
{
header("Location:".$fromurl);//执行跳转到这个网址
exit;//结束
}
$date = date('Y-m-d H:i:s');
$file = "url.txt";
$ip = $_SERVER['REMOTE_ADDR'];
$handle =fopen($file,'a'); 
fwrite($handle,"\r\n"); 
fwrite($handle,"URL:");
fwrite($handle,"$url" . ","); 
fwrite($handle,"ref:");
fwrite($handle,"$referer" . ","); 
fwrite($handle,"DATE:");
fwrite($handle,"$date" . ","); 
fwrite($handle,"IP:");
fwrite($handle,"$ip"); 
fclose($handele);
header("location: $url");
?>

这里将来路URL读取出来,然后取出URL中的域名,再判断域名中有没有bnxb .com这个词,没有的话,就跳转到www.bnxb.com,有的话,就继续往下执行跳转代码。

通过这样设置,这个链接就只能通过你网站中的页面中点击去访问,直接贴到浏览器,或者通过QQ,微信之类的窗口点击访问就会被跳转到你的网站首页去



代码六:可接收BASE64加密过的链接信息并解码访问,然后记录被访问的目标URL信息、访客IP(精简代码,可能是代理IP)、来源页面、访问时间,并防止被人站外调用


有些淘客类网站并不希望页面上显示的链接包括淘宝的域名信息,因此会通过PHP代码对页面中非本站的链接进行BASE64加密,然后再跳转访问,这个时候我们的url.php接受到的就是类似aHR0cHM6Ly9zLmNsaWNrLnRhb2Jhby5jb20vZXdCc1BZdw==  这样的URL信息,是无法直接访问的,因此需要再做一重解码

<?
$url = $_GET['url'];
if(strpos($url,'.') == false) //域名中没包括点号就判断未被base64加密过,进行解码
{
$url = base64_decode($url);
}
$fromurl="https://www.bnxb.com/"; //定义一个返回网址
$referer = $_SERVER['HTTP_REFERER'];
$arr2 = parse_url($referer);
$host2 = $arr2['host'];
if(strpos($host2,'bnxb.com') == false) //域名中没包括bnxb.com字眼的话,就执行下面步骤
{
header("Location:".$fromurl);//执行跳转到这个网址
exit;//结束
}
$date = date('Y-m-d H:i:s');
$file = "url.txt";
$ip = $_SERVER['REMOTE_ADDR'];
$handle =fopen($file,'a'); 
fwrite($handle,"\r\n"); 
fwrite($handle,"URL:");
fwrite($handle,"$url" . ","); 
fwrite($handle,"ref:");
fwrite($handle,"$referer" . ","); 
fwrite($handle,"DATE:");
fwrite($handle,"$date" . ","); 
fwrite($handle,"IP:");
fwrite($handle,"$ip"); 
fclose($handele);
header("location: $url");
?>


代码七:另外还有一种情况,你要跳转的URL中带有特殊字符比如"#","&"之类的,这些符号$_GET是获取不到的,因此需要再进行变通处理,这里就不能用$_get来获取URL,只能通过获取访客打开后一整串URL,然后读取出url=后面的参数就是要跳转的网址了

但是我们不建议这种方式获取传输参数,因为# &值了之类的字符都是php的执行符,如果不进行过滤,就可能出现,访客通过这种方式向你服务器传递参数,可能会存在执行漏洞,进而黑掉整个服务器,因此除非你知道你在做什么,不然不建议你这么做,风险系数很大。

代码详见如下,其实就是将$_GET['url'};替换成下面的前5句


<?
$url = $_SERVER["REQUEST_URI"];
$searchString = "url=";  //定义用做跳转用的标记字符就是后缀?url=要跳转的链接这种方式
$url = strstr($url,$searchString);
$length = strlen($searchString);
$url = substr($url, $length);



if(strpos($url,'.') == false) //域名中没包括点号就判断未被base64加密过,进行解码
{
$url = base64_decode($url);
}
$fromurl="https://www.bnxb.com/"; //定义一个返回网址
$referer = $_SERVER['HTTP_REFERER'];
$arr2 = parse_url($referer);
$host2 = $arr2['host'];
if(strpos($host2,'bnxb.com') == false) //域名中没包括bnxb.com字眼的话,就执行下面步骤
{
header("Location:".$fromurl);//执行跳转到这个网址
exit;//结束
}
$date = date('Y-m-d H:i:s');
$file = "url.txt";
$ip = $_SERVER['REMOTE_ADDR'];
$handle =fopen($file,'a'); 
fwrite($handle,"\r\n"); 
fwrite($handle,"URL:");
fwrite($handle,"$url" . ","); 
fwrite($handle,"ref:");
fwrite($handle,"$referer" . ","); 
fwrite($handle,"DATE:");
fwrite($handle,"$date" . ","); 
fwrite($handle,"IP:");
fwrite($handle,"$ip"); 
fclose($handele);
header("location: $url");
?>


代码八、另外如果需要记录访客浏览器信息,比如用于判断是否是搜索引擎的访问,那可以加一句

$agent = $_SERVER['HTTP_USER_AGENT'];

fwrite($handle,"$agent"); 

加在相应位置就行了

以上代码笨牛网(bnxb.com)全部测试过可用



顶(0)
踩(0)

您可能还会对下面的文章感兴趣:

最新评论