APP下载

浅谈网站后台管理系统防翻墙的设计与实现

2020-09-17张世雄

科学与信息化 2020年24期

张世雄

摘 要 网站的后台管理系统是一个网站最重要的部分,网站前端中大部分数据都来自于后台管理系统的操作,这样,后台管理系统的安全就显得尤为重要。本文主要利用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-),男;毕业院校:华中科技大学,专业:软件工程,学历:硕士,现就职单位:清远职业技术学院,研究方向:计算机科学与技术。