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
打開今日頭條,查看更多精彩圖片
※「OC底層」OC對象本質,如 isa, super-class
※「MySQL」之 開發規範
TAG:程序員小新人學習 |