ホームページ  >  記事  >  PHPフレームワーク  >  ThinkPHP でルーティングを設定して背景を非表示にする方法!

ThinkPHP でルーティングを設定して背景を非表示にする方法!

青灯夜游
青灯夜游転載
2021-09-08 20:04:203505ブラウズ

ThinkPHP背景を非表示にするにはどうすればよいですか?次の記事では、ThinkPHP がルーティング ルールを巧みに使用して背景を非表示にし、Web サイトの安全性を高める方法を紹介します。

ThinkPHP でルーティングを設定して背景を非表示にする方法!

ご存知のとおり、thinkphp フレームワークのバックエンド モジュールの名前が admin である場合は、http://domain を直接使用できます。 name/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 バージョンの定数です 他のバージョンの場合はご自身で修正してください。

#2 番目のステップは、application/common.php

1 にある Web サイトの構成情報を読み取ることです。構成の主な構造データテーブルは次のとおりです:

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;);

3 番目のステップ、ルート設定 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;

4 番目のステップ、ログイン コントローラー Login.php

1 にジャンプ検証用の Jump() メソッドを追加します。この Jump() メソッドは、実際には 3 番目のステップ

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() のコードには 1 つの機能しかありません。つまり、ログインしていない場合、禁止されたルートにアクセスすると、次のように 404 ページにジャンプします。

3. 404.html ページはアプリケーション ディレクトリに配置され、コードは次のとおりです :

<!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;)));
}
ThinkPHP でルーティングを設定して背景を非表示にする方法!

元のアドレス: https://juejin.cn/post/6981428649765371940

プログラミングの詳細 関連知識については、

プログラミング入門
をご覧ください。 !

以上がThinkPHP でルーティングを設定して背景を非表示にする方法!の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はjuejin.cnで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。