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