首頁 >php框架 >ThinkPHP >ThinkPHP怎麼設定路由,讓後台隱藏起來!

ThinkPHP怎麼設定路由,讓後台隱藏起來!

青灯夜游
青灯夜游轉載
2021-09-08 20:04:203629瀏覽

ThinkPHP如何隱藏後台?以下這篇文章就來跟大家介紹一下ThinkPHP巧用路由規則隱藏後台的方法,讓您的網站更安全!

ThinkPHP怎麼設定路由,讓後台隱藏起來!

眾所周知,如果thinkphp框架的後台模組名為admin的話,可以直接使用http://網域/admin的方式訪問管理員後台,這個訪問方式很方便,但也存在很大的安全隱患,黑客很容易就猜到了你的後台,然後進行暴力破解後台。那有什麼方法可以解決這個隱憂呢?下面我們一起來探討如何利用路由規則來修改後台路徑,防止駭客知道我們的後台入口。網路上有很多隱藏後台admin的教學課程,但真正好用的,還是這個路由規則法。

ThinkPHP怎麼設定路由,讓後台隱藏起來!

第一步、後台加入可以修改後台模組名稱的設定參數

1、

ThinkPHP怎麼設定路由,讓後台隱藏起來!

#2、儲存設定的關鍵程式碼,如下:

if(request()->isPost()) {
	$data=input('post.');
	//获取系统全部模块名
	$system_module = [];
	foreach (scandir(APP_PATH) as $dir) {
		if($dir == '.' || $dir == '..') {
			continue;
		}
		if(is_dir(APP_PATH.$dir)) {
			array_push($system_module, $dir);
		}
	}
	foreach ($data as $key => $vo) {
		if($key == 'admin_module' && $vo != 'admin' && in_array($vo, $system_module)) {
			$this->error('后台地址不能与现有系统模块名同名');
		}
	}
}

注意事項:

  • admin_module 是我資料庫裡儲存後台模組名稱的鍵
  • APP_PATH 是thinkphp5.0版本的常數,如果是其他版本,請自行修改。

第二步驟、在application/common.php裡讀取網站的設定資訊

1、config資料表主要架構如下:

DROP TABLE IF EXISTS `config`;
CREATE TABLE `config` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `key` varchar(255) DEFAULT NULL,
  `val` text,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

 2、sysconfig($name)方法:根據鍵名取得對應的值

<?php
use think\Cache;
use app\common\model\Config;

/**
 * 获取或配置系统参数
 * @param string $name  参数名称
 * @return string
 */
function sysconfig($name) {
	$config = Cache::get(&#39;config&#39;);
    if (empty($config)) {
        $config = Config::column(&#39;key,val&#39;);
		Cache::set(&#39;config&#39;,$config,1800);//缓存30分钟 
    }
    return isset($config[$name]) ? $config[$name] : &#39;&#39;;
}

補充:

1、如果只是個人使用的系統,不想那麼麻煩的話,也可以直接在config.php裡直接加入以下設定:

return [
    // +----------------------------------------------------------------------
    // | 应用设置
    // +----------------------------------------------------------------------
	// 后台模块名
    &#39;admin_module&#39;           => &#39;myadmin&#39;,
]

2、然後在專案裡直接呼叫:

$admin_module = Config(&#39;admin_module&#39;);

 

#第三步、路由設定application/route.php

<?php
use think\route;

$route_config = [
	&#39;index&#39;=>&#39;index/index&#39;,
];
//1.获取后台模块
$admin_module = sysconfig(&#39;admin_module&#39;);
if ($admin_module == &#39;&#39;) {
    $admin_module = &#39;admin&#39;;
}
//2.设置后台路由
if ($admin_module != &#39;admin&#39;) {
    $admin_route_config = [
		//路由禁止:原理是把它指到非登陆地址,在没有登陆情况下,跳转到404页面;
		&#39;admin/$&#39; => &#39;admin/login/jump&#39;,
		&#39;admin/login$&#39; => &#39;admin/login/jump&#39;,
		&#39;admin/login/index&#39; => &#39;admin/login/jump&#39;,
		$admin_module . &#39;/$&#39; => &#39;admin/login/index&#39;,	
    ];
    $route_config = array_merge($route_config, $admin_route_config);
}
return $route_config;

第四步驟、在登入控制器Login.php裡加入跳轉驗證的jump()方法

1、這個jump()方法其實就是我們第三步禁止路由的指定方法

public function jump() {
	if(!Session::has(&#39;uid&#39;)) {
		$request = Request::instance();
		if(sysconfig(&#39;admin_module&#39;) == &#39;admin&#39; || sysconfig(&#39;admin_module&#39;) == &#39;&#39;) {
			$this->redirect(&#39;@admin/login/index&#39;);
		} else {
			header("HTTP/1.1 404 Not Found");
			return $this->fetch(APP_PATH.&#39;/404.html&#39;);
		}
	} else {
		$this->redirect(&#39;@admin/index/index&#39;);
	}
}

2、上面jump()裡的程式碼,實作功能只有一個,那就是在未登入的情況下,存取被禁止的路由,會跳到404頁面,如下:

ThinkPHP怎麼設定路由,讓後台隱藏起來!

#3、404.html頁面放到application目錄,程式碼如下:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>很抱歉,此页面暂时找不到!</title>

<style type="text/css">
body {margin: 0px; padding:0px; font-family:"微软雅黑", Arial, "Trebuchet MS", Verdana, Georgia,Baskerville,Palatino,Times; font-size:16px;}
div{margin-left:auto; margin-right:auto;}
a {text-decoration: none; color: #1064A0;}
a:hover {color: #0078D2;}
img { border:none; }
h1,h2,h3,h4 {
/*	display:block;*/
	margin:0;
	font-weight:normal; 
	font-family: "微软雅黑", Arial, "Trebuchet MS", Helvetica, Verdana ; 
}
h1{font-size:44px; color:#0188DE; padding:20px 0px 10px 0px;}
h2{color:#0188DE; font-size:16px; padding:10px 0px 40px 0px;}

#page{width:910px; padding:20px 20px 40px 20px; margin-top:80px;}
.button{width:180px; height:28px; margin-left:0px; margin-top:10px; background:#009CFF; border-bottom:4px solid #0188DE; text-align:center;}
.button a{width:180px; height:28px; display:block; font-size:14px; color:#fff; }
.button a:hover{ background:#5BBFFF;}
</style>

</head>
<body>

<div id="page" style="border-style:dashed;border-color:#e4e4e4;line-height:30px;">
	<h1>抱歉,找不到此页面~</h1>
	<h2>Sorry, the page you&#39;re trying to find has moved. </h2>
	<font color="#666666">你请求访问的页面,暂时找不到!</font><br /><br />
	<div class="button">
		<a href="javascript:;" onClick="javascript :history.back(-1);" title="返回上一页">返回上一页</a>
	</div>
</div>

</body>
</html>

4、退出登入的方法

public function logout() {
	if(Session::has(&#39;adminid&#39;)) {
		Session::delete(&#39;adminid&#39;);
	}
	$this->redirect(url(&#39;@&#39;.sysconfig(&#39;admin_module&#39;)));
}

原文網址:https://juejin.cn/post/6981428649765371940

#更多程式設計相關知識,請造訪:程式設計入門! !

以上是ThinkPHP怎麼設定路由,讓後台隱藏起來!的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:juejin.cn。如有侵權,請聯絡admin@php.cn刪除