張世雄



摘 要 網站的后臺管理系統是一個網站最重要的部分,網站前端中大部分數據都來自于后臺管理系統的操作,這樣,后臺管理系統的安全就顯得尤為重要。本文主要利用PHP技術及Session會話對象設計兩種方法實現針對后臺的防翻墻。
關鍵詞 后臺管理系統;Session會話;防翻墻;PHP技術
引言
一個完整的網站分為web前端與后臺管理系統兩部分。前端負責數據的展示,后臺管理系統負責完成對數據庫的增、刪、改操作。所以必須擁有一定權限的后臺管理員才能操作后臺系統,對于沒有權限而操作后臺的行為是堅決不允許的。本文以開源后臺框架X-admin網站后臺管理系統設計并實現防止那些沒有權限而想進入后臺操作數據的行為,保證后臺數據的安全。
1設計思想
1.1 防翻墻概念
對于不是從登錄頁面輸入正確的賬號和密碼,而直接進入后臺管理頁面的行為,統稱為翻墻。所以防翻墻,就是防止這種行為,如果沒有登錄而直接運行后臺頁面,則會返回到登錄頁面要求進行賬號密碼輸入。
1.2 設計思想
(1)簡易版
登錄成功后,將登錄的信息(如登錄用戶名)添加到Session文件中,由于Session文件是可以被所有php頁面訪問,根據這個特點,對后臺中需要登錄權限的php頁面在運行之前先檢測Session文件中是否有登錄信息,如果有,則表示已登錄,可以進行增刪改查方面的操作,否則,返回到登錄頁面。基于這種操作的地方有很多,則可以在functions.php文件中創建一個公共函數進行判斷。實現流程如圖1所示。
(2)高級版
在網站配置文件中設置需要攔截的文件夾,將該文件夾及所有的子文件夾和文件中是php文件進行攔截;同時還可以設置該文件夾下排除之外不需攔截的文件。可以將實現的邏輯代碼放入到Model類中,在對類實例化之前進行判斷攔截,這樣,文件中只要操作Model類,則必先進行是否需要先進行登錄,才能操作。實現流程圖如圖2:
1.3 相關知識點
(1)PHP
PHP即“超文本預處理器”,是一種通用開源腳本語言。PHP是在服務器端執行的腳本語言,與C語言類似,是常用的網站編程語言。PHP獨特的語法混合了C、Java、Perl以及 PHP 自創的語法。利于學習,使用廣泛,主要適用于Web開發領域。
(2)Session是什么
Session是瀏覽器與服務器之間的一次交互會話,即從瀏覽器與服務器之間的對話。瀏覽器打開表示會話進行,瀏覽器關閉則會話結束。會話結束后將無法讀取剛剛會話的Session文件里面的信息。
(3)X-admin后臺管理模板框架
1)X-admin是基于layui的輕量級前端后臺管理框架,簡單,兼容性好,永久免費,面向所有層次的前后端程序員。
2)內置功能豐富:Xadmin作為一款全面的后臺管理系統框架,不僅提供了基本的CRUD功能,還內置了豐富的插件功能。包括數據導出、書簽、圖表、數據添加向導及圖片相冊等多種擴展功能。
3)后臺實際就是對表的增刪改查,從某種程度上來講不依賴于業務邏輯,又可以在后臺對每張表管理時加入自己的后臺邏輯,這也是它優于很多后臺管理系統的原因。
(4)Model類
Model類是一個通過PHP面向對象技術能夠實現對數據庫進行CRUD操作的模型類。PHP框架如ThinkPHP、Laravel框架都有操作數據庫的模型類-3。
2具體實現
2.1 網站文件基本結構及說明
網站虛擬目錄
|--APP
|--Admin ? ? ? ? ? 后臺文件夾
|--login.html ? ? ?登錄頁面
|--.....
|--Home ? ? ? ? ? 前端文件夾
|--config.php ? ? ? ? 配置文件
|--functions.php ? ? ? 網站公共函數文件
|--index.html ? ? ? ? 網站首頁
文件夾說明:
Admin后臺文件夾存放網站所有后臺文件及子文件夾;
Home網站前端文件夾,存放網站前端所有文件夾及子文件夾;
Config.php文件是整個網站的配置信息文件;
Functions.php文件是整個網站的公共函數文件[4];
2.2 代碼實現
(1) 簡易版實現
Functions.php編寫登錄判斷函數isLogin( )
/**
* 函數名:isLogin
* 作用:判斷是否登錄
* 返回值:不成功,則返回到登錄頁面
*
*/
function isLogin(){
if(empty($_SESSION[‘username])){
//表示沒有經過登錄頁面
echo ??;
exit;
}else {
//表示已經登錄
// 改變默認名稱為PHPSESSID的cookie的有效期
setcookie(session_name(),session_id(),time() + COOKIE_LIFETIME,”/”);
}
}
(2) 后臺需要進行登錄判斷的文件代碼操作
以添加文章文件article-add.php為例
<?php
// 實現博文的添加
$datas = $_POST;//獲取傳遞過來的文件信息
$datas[‘pubdate] = time();
include ?../../../config.php?;//加載配置文件
isLogin();//調用登錄判斷函數進行是否登錄判斷
$result = DB::table(“articles”)->insert($datas);//成功返回true,失敗返回false
echo $result;
2.3 高級版實現
Config.php文件防翻墻文件夾設置
$root = $_SERVER[‘DOCUMENT_ROOT];
$cDir = str_replace(“\\”, “/”, __DIR__);//將斜杠進行替換:
$root = str_replace($root, “”, $cDir);
define(“ROOT”, $root);//網站根目錄設置成常量ROOT
//防翻墻攔截文件夾配置
$middleware = [
?allow” => [ROOT.”/APP/admin”],//需要攔截的文件夾 ?后臺文件夾
?except” => [ROOT.”/APP/admin/action/login.php”]//排除之外不需攔截的文件或文件
];
define(“MIDDLEWARE”,$middleware);//設置攔截文件夾數組常量
(1)Model類編寫middleware方法實現對文件夾下的php文件進行攔截
/**
* 該方法實現對文件夾下的php文件進行攔截,沒有通過返回到登錄頁面
*
*/
private static function middleware(){
$runFile = strtolower($_SERVER[‘PHP_SELF]);//獲取正在運行的文件 strtolower:作用將字符串轉換成小寫
$flag1 = $flag2 = false;
//判斷正在運行的文件是否是排除之外
foreach(MIDDLEWARE[‘except] as $key => $value){
$v = strtolower($value);//轉成小寫
if(strpos($runFile,$v) !== false){
$flag1 = true;//表示正在運行的文件是排除之外的文件
break;//提前退出循環
}
}
if (!$flag1){
//表示不是排除之外才會執行到這里
foreach(MIDDLEWARE[‘allow] as $key => $value){
$v = strtolower($value);
if (strpos($runFile,$v) !== false){
// ? ? ? ? ? ? ? ? ? ?表示正在運行的文件是需要攔截的文件
$flag2 = true;
break;//跳出循環
}
}
}
if($flag2 && empty($_SESSION[‘username])){
//表示是需要攔截的文件,同時又沒登錄 ?需要返回到登錄頁面
echo ??;
exit;
}
}
3攔截運行效果
如果在沒有登錄的情況下直接登錄后臺頁面,則會提示返回登錄頁面[5]。
運行效果圖見圖3:
4結束語
網站安全是一個網站能否正常上線必須考慮的問題,特別是后臺的安全是重中之重。防翻墻只是保證后臺安全的一個。本文通過兩種方法設計及實現了防翻墻。簡便實現法操作簡單,但是不夠靈活;高級版實現復雜,但是使用方便,各有優缺點。
參考文獻
[1] 張世雄.PHP操作MySql數據庫的面向對象模型類實現[J].清遠職業技術學院學報,2018,11(6):45-48.
[2] 曹俊.軟件項目健康跟蹤控制管理系統的設計與實現[J].科技創新與應用,2020(22):49-51.
[3] 趙越超.基于JavaEE的小區物業管理系統設計與實現[J].物聯網技術,2020,10(7):107-110.
[4] 程文清.基于B/S架構的開放實驗室管理系統設計與實現[J].中國現代教育裝備,2020,(13):31-33.
[5] 黃中海.高校學生工作信息在線采集系統設計與實現[J].軟件導刊,2020,19(7):144-147.
作者簡介
張世雄(1977-),男;畢業院校:華中科技大學,專業:軟件工程,學歷:碩士,現就職單位:清遠職業技術學院,研究方向:計算機科學與技術。