您好,登錄后才能下訂單哦!
這篇文章給大家分享的是有關(guān)怎么使用PHP獲取referer判斷來路防止非法訪問的內(nèi)容。小編覺得挺實(shí)用的,因此分享給大家做個(gè)參考,一起跟隨小編過來看看吧。
下載頁(yè)面down.php 的php代碼 現(xiàn)在我發(fā)現(xiàn),用迅雷,谷歌瀏覽器直接打開,就能輸出下載文件,一點(diǎn)不起防盜鏈作用。 現(xiàn)在我想,只允許在我自己站上連接過來的可以直接使用,別的的站過來的,和直接輸入這個(gè)地址的,跳轉(zhuǎn)到copy.htm頁(yè)上去。
PHP中的 $_SERVER["HTTP_REFERER"] 預(yù)定義服務(wù)器變量可以判斷來路。
$_SESSION['HTTP_REFERER']可以獲取當(dāng)前鏈接的上一個(gè)連接的來源地址,即鏈接到當(dāng)前頁(yè)面的前一頁(yè)面的 URL 地址。
一般用于判斷瀏覽者是從哪里點(diǎn)擊鏈接跳到本頁(yè)面的,即所說的來路,還可以通過判斷來路來防止盜鏈。
例如:
<?php $url_array = parse_url($_SESSION['HTTP_REFERER']); //如果頁(yè)面的域名不是服務(wù)器域名,就連接到登陸窗口 if($_SERVER['HTTP_HOST'] != $url_array["host"]) { header("location: login.php"); exit; } ?>
近期有個(gè)項(xiàng)目需要用到防止用戶非法訪問某json頁(yè)面,基礎(chǔ)解決方法就是判斷來路來限制非調(diào)用訪問:
$_SERVER[‘HTTP_REFERER’]:來路鏈接,可能帶尾巴(如: 可以通過php內(nèi)置函數(shù)parse_url()來獲取到當(dāng)前網(wǎng)址(www.httple.net),即: $refererUrl = parse_url($_SERVER[‘HTTP_REFERER’]); $host = $refererUrl[‘host’]; $host的值即為來路的網(wǎng)址(www.httple.net)。 獲取到了來路的網(wǎng)址之后,我們就可以通過這個(gè)網(wǎng)址來限制訪問該頁(yè)面的權(quán)限了。代碼如下: if(!isset($_SERVER[‘HTTP_REFERER’]) || $referurl[‘host’] !=”www.httple.net”) { header(“l(fā)ocation: /”); //如果沒有來路,或者來路不是本站,跳轉(zhuǎn)到首頁(yè)。 exit; }
把這行代碼放到j(luò)son數(shù)據(jù)頁(yè)面的最上方,就能簡(jiǎn)單解決該問題。
該處理方法的缺陷:可通過偽造來路獲取到該頁(yè)面的正常數(shù)據(jù)。
相關(guān)代碼
獲取來路Url 的方法,主要用到服務(wù)器變量中HTTP_REFERER函數(shù)的使用,代碼貼上:
function get_referer(){ $url = $_SERVER["HTTP_REFERER"]; //獲取完整的來路URL $str = str_replace("http://","",$url); //去掉http:// $strdomain = explode("/",$str); // 以“/”分開成數(shù)組 $domain = $strdomain[0]; //取第一個(gè)“/”以前的字符 return $domain; } //對(duì)于百度、谷歌搜索引擎來路判斷 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網(wǎng)站 獲取來路Url 的方法,主要用到服務(wù)器變量中HTTP_REFERER函數(shù)的使用,代碼貼上:
function get_referer(){ $url = $_SERVER["HTTP_REFERER"]; //獲取完整的來路URL $str = str_replace(“http://”,””,$url); //去掉http:// $strdomain = explode(“/”,$str); // 以“/”分開成數(shù)組 $domain = $strdomain[0]; //取第一個(gè)“/”以前的字符 return $domain; } //對(duì)于百度、谷歌搜索引擎來路判斷 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; }
在處理一個(gè)表單的時(shí)候,不得不考慮到用戶靜態(tài)提交的可能,discuz 已經(jīng)根據(jù)formhash來判斷
這里我用另一種方式來處理 判斷頁(yè)面來路,當(dāng)然這種方法也能夠被偽造HTTP_REFERER來路
第二部分是解決了 PHP中header('location: 跳轉(zhuǎn)頁(yè)面后 下一頁(yè)無(wú)法獲取HTTP_REFERER,這里只能在頁(yè)面加個(gè)鏈接 然后用js 模擬點(diǎn)擊鏈接,這樣下一頁(yè)肯定會(huì)收到HTTP_REFERER的。Keyword:document.getElementById('gourl').click();
感謝各位的閱讀!關(guān)于“怎么使用PHP獲取referer判斷來路防止非法訪問”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,讓大家可以學(xué)到更多知識(shí),如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到吧!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。