tp的url和基本属性状态
2021-06-29 18:04
YPE html>
标签:攻击 php 版本号 lsp 新建 文件 bsp cells tab
在上篇随笔中我们已经知道了tp框架的四种访问方式,那么当在地址栏输入不存在的操作方法、控制器会怎么样呢?
先看一下定义:
空操作:一个对象(控制器)调用本身不存在的方法
空控制器:在实例化控制器对象的时候,没有找到指定的类
首先,在Application文件下新建Ceshi模块,并在Ceshi模块下按照Home模块建立相同的文件夹,如下图:
1)在Controller文件夹下新建Login控制器:
1
2
3
4
5
6
7
8
9
10
|
namespace Ceshi\Controller;
use Think\Controller;
class LoginController extends Controller
{ public function login()
{
echo "欢迎登陆!" ;
}
} |
2)地址栏输入访问地址:http://localhost/wamp/thinkphp/index.php/Ceshi/Login/login
一、 在地址栏访问不存在的方法,会怎么样?
http://localhost/wamp/thinkphp/index.php/Ceshi/Login/loginsss
通过此页面,我们可以知道:
(1)这样的界面暴露了我们是用什么工具写的代码,同时暴露了thinkphp的版本号,如果黑客找到该版本号的漏洞就可以攻击你了。
(2)其次,这样的界面很不友好,对于用户来说,他们看不懂也不知道是哪里出错了。
如何给出更为安全、更为友好的提示呢?
父类中有个方法如下图,我们可以仿照这个来做:
第一种方法:做一个空的模板
1)在View文件夹下建一个Ceshi文件夹,路径如下:
loginsss.html
1
2
3
4
5
6
7
8
9
10
11
12
13
|
>
*{ margin:0px auto; padding:0px}
|
2) 再次访问http://localhost/wamp/thinkphp/index.php/Ceshi/Login/loginsss
这样相比只出现代码要友好的多,但是,我们不可能每输入一个不存在的方法就做一个模板,这样不切实际,再说我们也不知道用户下一次会输入什么样的操作方法,所以这种方法并不可行。
第二种方法:做一个空的方法:_empty()方法
1
2
3
4
5
6
7
8
9
10
11
12
13
|
namespace Ceshi\Controller;
use Think\Controller;
class LoginController extends Controller
{ public function login()
{
echo "欢迎登陆!" ;
}
public function _empty(){
echo "您访问的操作方法不存在!" ;
}
} |
这样不论访问到什么样的空方法都会显示“您访问的操作方法不存在!”如图:
http://localhost/wamp/thinkphp/index.php/Ceshi/Login/logins
http://localhost/wamp/thinkphp/index.php/Ceshi/Login/aaa
二、 在地址栏访问不存在的控制器,会怎么样?出现同样的报错
解决方法:
新建一个Empty控制器:
EmptyController.class.php
1
2
3
4
5
6
7
8
9
|
namespace Ceshi\Controller;
use Think\Controller;
class EmptyController extends Controller
{ public function _empty(){
echo "您访问的控制器有误哦" ;
}
} |
再访问http://localhost/wamp/thinkphp/index.php/Ceshi/Main/login
换个 http://localhost/wamp/thinkphp/index.php/Ceshi/MMMn/login
这样就可以解决空控制器和空操作的问题了~.~.~
tp的url和基本属性状态
标签:攻击 php 版本号 lsp 新建 文件 bsp cells tab
原文地址:http://www.cnblogs.com/nzhcww/p/7140756.html
上一篇:JS阅读摘要