对公司内部某个模块某个源码审计

栏目: 编程语言 · PHP · 发布时间: 6年前

内容简介:经常使用或者曾经使用过ThinkPHP之类框架的人,肯定都知道路由(Route)这么一个概念,Laravel的路由配置在AppProvidersRouteServiceProvider.php中,其中function map就记录了框架的路由信息保存的位置所以我们直接跳到路由文件去查看Laravel框架的路由是怎么写的吧

先科普一点小知识:

1.路由

经常使用或者曾经使用过ThinkPHP之类框架的人,肯定都知道路由(Route)这么一个概念,Laravel的路由配置在AppProvidersRouteServiceProvider.php中,其中function map就记录了框架的路由信息保存的位置

对公司内部某个模块某个源码审计

所以我们直接跳到路由文件去查看 Laravel 框架的路由是怎么写的吧

在AppHttproutes.php中

对公司内部某个模块某个源码审计

group表示在这一个group(组)里面,都使用相同的配置(应该可以这么说吧) prefix表示无论下面是何种请求,都要在前面加上admin namespace表示的是在哪一个命名空间内 get表示的是只允许get请求 uses后面接的东西,表示这一个请求是通过哪一个控制器的哪一个函数去进行处理的 middleware是laravel特有的中间件,就像java web的过滤器一样 下面举个例子,比如网址是www.ooxx.com:

Route::group(['namespace' => 'Admin'], function () { 
   Route::post('new/api/login', ['uses' => 'AdminController@postLogin']);
   });

那么这一个路由的意思就是,处理post到http://www.ooxx.com/new/api/login的请求是由AppHttpControllersAdmin(命名空间)AdminController.php(控制器)中的postLogin函数处理。

2.中间件

中间件是Laravel特有的东西,那么这个又是在哪里定义的呢?答案就在AppHttpKernel.php中

对公司内部某个模块某个源码审计

在上文中,我们看到了有一个中间件叫token,那么放到这个图里面,我们明显发现。Token中间件就是AppHttpMiddlewareTokenSession这个类啊,那么这个类又是干嘛的呢?我们点进去看就会发现原来是验证cookie里面是否有XSRF-TOKEN和Laravel_session的

对公司内部某个模块某个源码审计

正文开始啦

通过查看路由文件,发现get请求/driver_portrait/personal_portrait_search时,在Beeper_bi_webappHttpControllersDriverPortraitDriverPortraitController.php中存在点问题。

对公司内部某个模块某个源码审计

* 点击个人画像查询数据

 *


 * @param Request $request
 * @return array

 */
public function personalPortraitSearch(Request $request)
{
    $this->validate($request, [
        'sub_menu_code' => 'required',
    ]);
    //前端判断ajax成功
    if(empty($request->input('driver_name')) &&  empty($request->input('driver_id')))
    {
        return $this->output_to_front([
            'data' => ''
        ]);
    }
    $where = $this->getWhere($request);    //$where 是一维数组,记录了driver_name和driver_id
    $params['where'] = $where;
    $sub_menu_code = $request->input('sub_menu_code');   // personal_introduce
    $params['sub_menu_code'] = $sub_menu_code;
    $data = $this->pull('v1/report/driver_portrait/driver_portrait_search', $params, 'post', true);
    $data = json_decode($data, true);
    if ($data['code'] == 0) {
        $data = $this->data2Tags($data['info'][0], $sub_menu_code, $request);
    }
    return $this->output_to_front([
        'data' => $data
    ]);
}
```

在sublime中连续ctrl+t,找到getWhere的定义处,可以明显看出来只是把提交的driver_name变量的值分割,再检查driver_id是否有值,最后返回给$where数组

public function getWhere(Request $request)
    {
        $where = [];
        $driver_name = $request->input('driver_name');
        if (!empty($driver_name)) {
            if (stripos($driver_name, "|") !== false) {
                $arr = explode('|', $driver_name);
                $where[] = ['driver_name', $arr[0]];
                $where[] = ['driver_id', $arr[1]];
            } else {
                $where[] = ['driver_name', $driver_name];
            }
        }

        $driver_id = $request->input('driver_id');
        if (!empty($driver_id)) {
            $where[] = ['driver_id', $driver_id];
        }

        return $where;
    }

接着又回头在personalPortraitSearch中继续运行,定义了一个 $params数组,内容包含了来自客户端的sub_menu和getwhere,接着把$params数组请求远端的API

对公司内部某个模块某个源码审计

   public function personalPortraitSearch()
    {
        $params = $this->request->all();
        $where=$params['where'];
        $item=$params['sub_menu_code'];
        $data = $this->service->search($where,$item);//        $this->setCode(1002);
        if(empty($data))
        {
            return $this->Output();
        }
        return $this->formatOutput($data);
    }

由此可见,直接进入search函数了,那么search函数又是在哪里定义的呢?可以看到前面是service->,那我们回到文件上方,并没有构造一个service类,所以只能到他的父类去寻找这个service类,也就是下图的BaseReportController,文件上方也显示了BaseReportController的位置在AppV1ReportControllersBaseReportController

对公司内部某个模块某个源码审计

去到BaseReportController中查看,查找到search函数

对公司内部某个模块某个源码审计

附上SQLMap的运行截图吧

对公司内部某个模块某个源码审计


以上所述就是小编给大家介绍的《对公司内部某个模块某个源码审计》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

大话存储

大话存储

张冬 / 清华大学出版社 / 2008-11 / 58.00元

网络存储,是近二十年来的新兴行业。从纸带到硬盘再到大型磁盘阵列,存储系统经历了从简单到复杂,从单块硬盘到存储区域网络(SAN)。网络存储行业目前已经是一个步入正轨的IT行业了。. 网络存储是一个涉及计算机硬件以及网络协议/技术、操作系统以及专业软件等各方面综合知识的领域。目前国内阐述网络存储的书籍少之又少,大部分是国外作品,对存储系统底层细节的描述不够深入,加之术语太多,初学者很难真正理解网......一起来看看 《大话存储》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具