thinkphp如何隱藏后臺?下面本篇文章就來給大家介紹一下thinkphp巧用路由規則隱藏后臺的方法,讓您的網站更安全!
眾所周知,如果thinkphp框架的后臺模塊名為admin的話,可以直接使用thinkphp的方式訪問管理員后臺,這個訪問方式很方便,但也存在很大的安全隱患,黑客很容易就猜到了你的后臺,然后進行暴力破解后臺。那有什么方法可以解決這個隱患呢?下面我們一起來探討如何利用路由規則來修改后臺路徑,防止黑客知道我們的后臺入口。網上有很多隱藏后臺admin的教程,但真正好用的,還是這個路由規則法。
第一步、后臺添加可以修改后臺模塊名的設置參數
1、
立即學習“PHP免費學習筆記(深入)”;
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 thinkCache; use appcommonmodelConfig; /** * 獲取或配置系統參數 * @param string $name 參數名稱 * @return string */ function sysconfig($name) { $config = Cache::get('config'); if (empty($config)) { $config = Config::column('key,val'); Cache::set('config',$config,1800);//緩存30分鐘 } return isset($config[$name]) ? $config[$name] : ''; }
補充:
1、如果只是個人使用的系統,不想那么麻煩的話,也可以直接在config.php里直接添加如下配置:
return?[ ????//?+---------------------------------------------------------------------- ????//?|?應用設置 ????//?+---------------------------------------------------------------------- //?后臺模塊名 ????'admin_module'???????????=>?'myadmin', ]2、然后在項目里直接調用:
$admin_module?=?Config('admin_module');?
第三步、路由設置 application/route.php
<?php use thinkroute; $route_config = [ 'index'=>'index/index', ]; //1.獲取后臺模塊 $admin_module?=?sysconfig('admin_module'); if?($admin_module?==?'')?{ ????$admin_module?=?'admin'; } //2.設置后臺路由 if?($admin_module?!=?'admin')?{ ????$admin_route_config?=?[ //路由禁止:原理是把它指到非登陸地址,在沒有登陸情況下,跳轉到404頁面; 'admin/$'?=>?'admin/login/jump', 'admin/login$'?=>?'admin/login/jump', 'admin/login/index'?=>?'admin/login/jump', $admin_module?.?'/$'?=>?'admin/login/index', ????]; ????$route_config?=?array_merge($route_config,?$admin_route_config); } return?$route_config;
第四步、在登錄控制器Login.php里添加跳轉驗證的jump()方法
1、這個jump()方法實際上就是我們第三步禁止路由的指定方法
public?function?jump()?{ if(!Session::has('uid'))?{ $request?=?Request::instance(); if(sysconfig('admin_module')?==?'admin'?||?sysconfig('admin_module')?==?'')?{ $this->redirect('@admin/login/index'); }?else?{ header("http/1.1?404?Not?Found"); return?$this->fetch(APP_PATH.'/404.html'); } }?else?{ $this->redirect('@admin/index/index'); } }
2、上面jump()里的代碼,實現功能只有一個,那就是在未登錄的情況下,訪問被禁止的路由,會跳轉到404頁面,如下:
3、404.html頁面放到application目錄,代碼如下:
nbsp;html?PUBLIC?"-//W3C//DTD?XHTML?1.0?Transitional//EN"?"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <meta><title>很抱歉,此頁面暫時找不到!</title><style> 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><div> <h1>抱歉,找不到此頁面~</h1> <h2>Sorry,?the?page?you're?trying?to?find?has?moved.?</h2> <font>你請求訪問的頁面,暫時找不到!</font><br><br><div> <a>返回上一頁</a> </div> </div>
4、退出登錄的方法
public?function?logout()?{ if(Session::has('adminid'))?{ Session::delete('adminid'); } $this->redirect(url('@'.sysconfig('admin_module'))); }
原文地址:https://juejin.cn/post/6981428649765371940
更多編程相關知識,請訪問:thinkphp!!