首頁  >  文章  >  後端開發  >  如何用PHP取得referer判斷來路防止非法訪問

如何用PHP取得referer判斷來路防止非法訪問

慕斯
慕斯轉載
2021-06-22 10:01:026167瀏覽

這篇文章跟大家介紹如何用PHP取得referer判斷來路防止非法訪問?有一定的參考價值,有需要的朋友可以參考一下,希望對大家有幫助。

如何用PHP取得referer判斷來路防止非法訪問

下載頁面down.php 的php程式碼 現在我發現,用迅雷,Google瀏覽器直接打開,就能輸出下載文件,一點不起防盜鏈作用。 現在我想,只允許在我自己站上連接過來的可以直接使用,別的的站過來的,和直接輸入這個地址的,跳到copy.htm頁上去。

PHP中的 $_SERVER["HTTP_REFERER"] 預先定義伺服器變數可以判斷來路。

$_SESSION['HTTP_REFERER']可以取得目前連結的上一個連接的來源位址,即連結到目前頁面的前一頁面的 URL 位址。
一般用於判斷瀏覽者是從哪裡點擊連結跳到本頁面的,也就是所說的來路,還可以透過判斷來路來防止盜鏈。
例如:

<?php
 $url_array = parse_url($_SESSION[&#39;HTTP_REFERER&#39;]); 
 //如果页面的域名不是服务器域名,就连接到登陆窗口 
 if($_SERVER[&#39;HTTP_HOST&#39;] != $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(),&#39;baidu.com&#39;)){   
$s = 1;   
}   
else if(strstr(get_referer(),&#39;google.com.hk&#39;)){   
$s = 1;   
}   
return $se;    
}

php網站 取得來路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;
}

 

在處理表單的時候,不得不考慮到使用者靜態提交的可能,discuz 已經根據formhash來判斷

這裡我用另一種方​​式來處理判斷頁面來路,當然這種方法也能夠被偽造HTTP_REFERER來路

# 第二部分是解決了 PHP中header('location:  跳轉頁面後下一頁無法獲取HTTP_REFERER,這裡只能在頁面加個鏈接然後用js 模擬點擊鏈接,這樣下一頁肯定會收到HTTP_REFERER的。Keyword:document.getElementById('gou​​rl').click();

推薦學習:php影片教學

以上是如何用PHP取得referer判斷來路防止非法訪問的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:csdn.net。如有侵權,請聯絡admin@php.cn刪除