當前位置:
首頁 > 知識 > php 判斷來路,PHP獲取referer判斷來路防止非法訪問

php 判斷來路,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』]:來路鏈接,可能帶尾巴(如:http://www.httple.net/iwork/20.html),可以通過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] view plain copy

php 判斷來路,PHP獲取referer判斷來路防止非法訪問

打開今日頭條,查看更多精彩圖片

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 程序員小新人學習 的精彩文章:

「OC底層」OC對象本質,如 isa, super-class
「MySQL」之 開發規範

TAG:程序員小新人學習 |