主页 > 网络编程 > ThinkPHP 5.1框架结合RCE漏洞的深入分析(4)

ThinkPHP 5.1框架结合RCE漏洞的深入分析(4)

可是为什么路径是在thinkphp/library/think下呢?这就要涉及要另一个概念—根命名空间。

4.1.1 根命名空间

根命名空间是一个关键的概念,以上面的\think\cache\driver\File类为例,think就是一个根命名空间,其对应的初始命名空间目录就是系统的类库目录(thinkphp/library/think),我们可以简单的理解一个根命名空间对应了一个类库包。

系统内置的几个根命名空间(类库包)如下:

4.2 URL访问

在没有定义路由的情况下典型的URL访问规则(PATHINFO模式)是:

http://serverName/index.php(或者其它应用入口文件)/模块/控制器/操作/[参数名/参数值...]

如果不支持PATHINFO的服务器可以使用兼容模式访问如下:

http://serverName/index.php(或者其它应用入口文件)?s=/模块/控制器/操作/[参数名/参数值...]

什么是pathinfo模式?

我们都知道一般正常的访问应该是:

http://serverName/index.php?m=module&c=controller&a=action&var1=vaule1&var2=vaule2

而pathinfo模式是这样的:

http://serverName/index.php/module/controller/action/var1/vaule1/var2/value2

在php中有一个全局变量$_SERVER['PATH_INFO'],我们可以通过它来获取index.php后面的内容。

什么是$_SERVER['PATH_INFO']?

官方是这样定义它的:包含由客户端提供的、跟在真实脚本名称之后并且在查询语句(query string)之前的路径信息。

什么意思呢?简单来讲就是获得访问的文件和查询?之间的内容。

强调一点,在通过$_SERVER['PATH_INFO']获取值时,系统会把’\'自动转换为’/'(这个特性我在Mac Os(MAMP)、Windows(phpstudy)、Linux(php+apache)环境及php5.x、7.x中进行了测试,都会自动转换,所以系统及版本之间应该不会有所差异)。

下面再分别介绍下入口文件、模块、控制器、操作、参数名/参数值。

1. 入口文件

文件地址:public\index.php

作用:负责处理请求

2. 模块(以前台为例)

模块地址:application\index

作用:网站前台的相关部分

3. 控制器

控制器目录:application\index\controller

作用:书写业务逻辑

4. 操作(方法)

在控制器中定义的方法

5. 参数名/参数值

方法中的参数及参数值

例如我们要访问index模块下的Test.php控制器文件中的hello方法。

那么可以输入<http://serverName/index.php/index(模块)/Test(控制器)/hello(方法)/name(参数名)/world(参数值)

这样就访问到指定文件了。

另外再讲一下Thinkphp的几种传参方式及差别。

PATHINFO: index.php/index/Test/hello/name/world

只能以这种方式传参。

兼容模式:

index.php?s=index/Test/hello/name/world

index.php?s=index/Test/hello&name=world

当我们有两个变量$a、$b时,在兼容模式下还可以将两者结合传参:

说点什么吧
  • 全部评论(0
    还没有评论,快来抢沙发吧!