這篇文章跟大家介紹如何用PHP取得referer判斷來路防止非法訪問?有一定的參考價值,有需要的朋友可以參考一下,希望對大家有幫助。
下載頁面down.php 的php程式碼 現在我發現,用迅雷,Google瀏覽器直接打開,就能輸出下載文件,一點不起防盜鏈作用。 現在我想,只允許在我自己站上連接過來的可以直接使用,別的的站過來的,和直接輸入這個地址的,跳到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函數的使用,程式碼貼上:
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('gourl').click();
推薦學習:php影片教學
以上是如何用PHP取得referer判斷來路防止非法訪問的詳細內容。更多資訊請關注PHP中文網其他相關文章!