>PHP 프레임워크 >ThinkPHP >배경을 숨기도록 ThinkPHP에서 라우팅을 구성하는 방법!

배경을 숨기도록 ThinkPHP에서 라우팅을 구성하는 방법!

青灯夜游
青灯夜游앞으로
2021-09-08 20:04:203630검색

ThinkPHP배경을 숨기는 방법은 무엇인가요? 다음 기사에서는 ThinkPHP가 라우팅 규칙을 교묘하게 사용하여 배경을 숨기고 웹사이트를 더욱 안전하게 만드는 방법을 소개합니다!

배경을 숨기도록 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('后台地址不能与现有系统模块名同名');
		}
	}
}

Notes:

  • admin_module은 내 데이터베이스에 배경 모듈 이름을 저장하는 키입니다.
  • APP_PATH는 thinkphp5.0 버전의 상수입니다. 다른 버전인 경우 직접 수정하세요.

두 번째 단계는 application/common.php

1에서 웹사이트의 구성 정보를 읽는 것입니다. 구성 데이터 테이블의 주요 구조는 다음과 같습니다.

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

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에서 경로를 금지하기 위해 지정된 메소드입니다. 즉, 로그인하지 않고 금지된 경로에 접근하면 다음과 같이 404 페이지로 점프하게 됩니다:

배경을 숨기도록 ThinkPHP에서 라우팅을 구성하는 방법!

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

원본 주소 : https://juejin.cn /post/6981428649765371940

더 많은 프로그래밍 관련 지식은

프로그래밍 입문을 방문해 주세요! !

위 내용은 배경을 숨기도록 ThinkPHP에서 라우팅을 구성하는 방법!의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 juejin.cn에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제