如何用PHP获取referer判断来路防止非法访问

本篇文章给大家介绍如何用PHP获取referer判断来路防止非法访问?有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。

如何用PHP获取referer判断来路防止非法访问

下载页面down.php 的php代码 现在我发现,用迅雷,谷歌浏览器直接打开,就能输出下载文件,一点不起防盗链作用。 现在我想,只允许在我自己站上连接过来的可以直接使用,别的的站过来的,和直接输入这个地址的,跳转到copy.htm页上去。

PHP中的 $_SERVER["HTTP_REFERER"] 预定义服务器变量可以判断来路。

$_SESSION['HTTP_REFERER']可以获取当前链接的上一个连接的来源地址,即链接到当前页面的前一页面的 URL 地址。
一般用于判断浏览者是从哪里点击链接跳到本页面的,即所说的来路,还可以通过判断来路来防止盗链。
例如:

<?php
 $url_array = parse_url($_SESSION['HTTP_REFERER']); 
 //如果页面的域名不是服务器域名,就连接到登陆窗口 
 if($_SERVER['HTTP_HOST'] != $url_array["host"]) { 
 header("location: login.php"); 
 exit; 
 } 
 ?>

登录后复制

近期有个项目需要用到防止用户非法访问某json页面,基础解决方法就是判断来路来限制非调用访问:

$_SERVER[‘HTTP_REFERER’]:来路链接,可能带尾巴(如: 
可以通过php内置函数parse_url()来获取到当前网址(www.httple.net),即:
$refererUrl = parse_url($_SERVER[‘HTTP_REFERER’]);
$host = $refererUrl[‘host’];
$host的值即为来路的网址(www.httple.net)。
获取到了来路的网址之后,我们就可以通过这个网址来限制访问该页面的权限了。代码如下:
if(!isset($_SERVER[‘HTTP_REFERER’]) || $referurl[‘host’] !=”www.httple.net”) { header(“location: /”); 
//如果没有来路,或者来路不是本站,跳转到首页。 exit; }

登录后复制

把这行代码放到json数据页面的最上方,就能简单解决该问题。

该处理方法的缺陷:可通过伪造来路获取到该页面的正常数据。

相关代码

获取来路Url 的方法,主要用到服务器变量中HTTP_REFERER函数的使用,代码贴上:

function get_referer(){   
$url = $_SERVER["HTTP_REFERER"]; //获取完整的来路URL   
$str = str_replace("http://","",$url); //去掉http://   
$strdomain = explode("/",$str); // 以“/”分开成数组   
$domain = $strdomain[0]; //取第一个“/”以前的字符  
return $domain;  
}   

//对于百度、谷歌搜索引擎来路判断   
function get_seo(){  
$s = 0;   
if(strstr(get_referer(),'baidu.com')){   
$s = 1;   
}   
else if(strstr(get_referer(),'google.com.hk')){   
$s = 1;   
}   
return $se;    
}

登录后复制

php网站 获取来路Url 的方法,主要用到服务器变量中HTTP_REFERER函数的使用,代码贴上:

在处理一个表单的时候,不得不考虑到用户静态提交的可能,discuz 已经根据formhash来判断

这里我用另一种方式来处理 判断页面来路,当然这种方法也能够被伪造HTTP_REFERER来路

第二部分是解决了 PHP中header('location: 跳转页面后 下一页无法获取HTTP_REFERER,这里只能在页面加个链接 然后用js 模拟点击链接,这样下一页肯定会收到HTTP_REFERER的。Keyword:document.getElementById('gourl').click();

关于如何用PHP获取referer判断来路防止非法访问的文章就分享到这,如果对你有帮助欢迎继续关注我们哦

本文来自投稿,不代表重蔚自留地立场,如若转载,请注明出处https://www.cwhello.com/244191.html

如有侵犯您的合法权益请发邮件951076433@qq.com联系删除

(0)
php学习php学习订阅用户
上一篇 2023年3月29日 08:43
下一篇 2023年3月29日 23:09

相关推荐

  • 数组转json后的结果是数组还是对象? (踩坑记录)

    最近工作中经常遇到这些问题,因此记录一下~问题:数组转json,有时是对象,有时是数组?情况一:$arr = [1,2,3];//数组下标从0开始的 echo json_encode($arr); //[1,2,3] $arr = [1=>1,2=>2,3=>3];//数组…

    2022年6月27日
    0143
  • 小编教你php字符串长度。

    在PHP中,获取字符串的长度是一个常见的需求,我们可以使用内置的`strlen()`函数来实现这个功能,`strlen()`函数返回一个字符串的长度(以字节为单位),如果字符串包含多字节字符(例如某些特殊符号),则返回的长度可…

    2024年6月20日
    02
  • 利用PHP8中的array_intersection()函数实现数组交集的方法。

    随着PHP8的发布,它带来了许多强大的新功能和改进。其中一个值得一提的是array_intersection()函数。这个函数允许您将两个或更多数组交集,即找出它们之间的相同的元素。在这篇文章中,我们将深入研究这个新函数,…

    2023年5月21日
    00
  • 使用PHP8中的str_begins_with()函数快速匹配字符串前缀。

    随着PHP 8的发布,引入了许多新功能和语言改进,其中包括称为str_begins_with()的新函数。这个函数的作用是匹配一个字符串是否以指定的前缀开头。在本文中,将介绍str_begins_with()函数及其用途,以及如何在PHP代…

    2023年5月21日
    03
  • PHP数组的相关介绍

    数组的覆盖 说明:如果后面的元素中的下标和前面元素的下标“重复”了,后面元素的值会覆盖前面的元素值。 数组的自增 说明:有一个固定的数组,这个时候需要在网数组中添加一个新的元素。 数组的分类 索引数组:下标…

    2018年4月7日 PHP自学教程
    0264
  • 详解PHP+fiddler抓包采集微信文章阅读数点赞数的思路

    简介:分析接口知道要获取文章阅读数和点赞数必须有key和uin这两个关键参数,不同公众号key不一样(据说有万能微信key,不懂怎么搞到),同一个公众号key大概半小时会过期提交链接获取文章阅读量api思路:1.将客户…

    2022年6月16日 PHP自学教程
    0135
  • php基本语法形式及变量规则

    基本语法形式 区分大小写 主要是指变量名区分大小写 常量通常也区分,但常量也可以自己设定为不区分(不推荐) 但函数名不区分 而系统中使用的关键字也不区分大小写,比如if, else, for 语句结束符,用分号 一个p…

    2017年11月1日
    0199
  • PHP整数型--INT

    说明:是负数和0和整数的集合,在PHP中存储整数为10进制、八进制、十六进制 语法:$var = 整数数字; 八进制的写法:在数字之前加0,就是八进制,数字是有0-7 十六位进制的写法:在数字前面加0x,数字为:0-f  01234…

    2017年11月20日
    0286

联系我们

QQ:951076433

在线咨询:点击这里给我发消息邮件:951076433@qq.com工作时间:周一至周五,9:30-18:30,节假日休息