第27天 安全开发-PHP应用TP 框架路由访问对象操作内置过滤绕过核心漏洞
时间轴


演示案例
TP 框架-开发-配置架构&路由&MVC 模型
1、配置架构-导入使用
 
  
  
  
  
  
  
  
  
  
 2、路由访问-URL 访问
 
  
  
  
 非官方写法访问方式
当使用非官方的写法访问时,可以看到只能用?x=1来访问,而当使用/x/1时访问报错。



官方写法访问方式
当使用官方写法访问时,?name=12可以访问,/name/12也可以访问

<?php
namespace app\index\controller;
use think\Controller;
use think\Request;class Index extends Controller
{public function index(){return '123';}public function xiaodi(){return $this->request->param('name');}}
?>

MVC模型
对应model(模板) view(视图) controller(控制器)
其中核心代码文件在controller中
3、数据库操作-应用对象
连接数据库

首先在application下找到database.php文件

修改database(数据库名)为demo01,username为root,密码123456,端口号3306,其余根据自己需求修改。

查询数据库

在navicat中找到之前创建的news表格

在ThinkPHP—>application下新建一个test文件夹,并在这个文件夹下创建controller文件夹,其中包含Test.php
非官方写法
以之前的news.php为例
<?php
include 'config.php';
//读取news.html中的内容
$template=file_get_contents('news.html');$id=$_GET['id'] ?? '1';
$sql="select * from news where id=$id";
echo $sql;
$data=mysqli_query($con,$sql);
while($row=mysqli_fetch_row($data)){$page_title=$row[1];$heading=$row[2];$subheading=$row[3];$content=$row[4];$item=$row[5];
}$template=str_replace('{page_title}',$page_title,$template);
$template=str_replace('{heading}',$heading,$template);
$template=str_replace('{subheading}',$subheading,$template);
$template=str_replace('{content}',$content,$template);
$template=str_replace('{$item}',$item,$template);eval('?>'.$template);
//eval函数会将传递给它的字符串作为PHP代码执行,即将?>连接到$template的开头,再执行该字符串
?> 当执行?id=1 and 1=1时,可以看到这个值会被接收
当输入?id=2时会出现报错

官方写法
<?php
namespace app\Test\controller;
use think\Db;
use think\Controller;class Test extends Controller
{public function testsql(){//使用tp框架操作mysql数据库//SELECT * FROM `think_user` WHERE  `id` = 1 LIMIT 1//规矩写法$id = request()->param('x');$data = Db::table('news')->where('id', $id)->find();return json($data);}
}
?>当输入ip/index.php/test/test/testsql/x/1去查询这个数据库的时候,页面可以正常回显

并且可以发现,在/x/1后面输入任何东西都不会显示在页面上

结论
1.使用TP框架操作数据库时,默认是受到框架内置过滤保护的,而且方便开发。
2.原生态的数据库操作如果没有过滤就会受到SQL注入攻击。
4、文件上传操作-应用对象

首先在ThinkPHP—>public文件夹下新建一个upload.html,其中代码为
<form action="/index.php/test/test/upload" enctype="multipart/form-data" method="post"><input type="file" name="image" /> <br><input type="submit" value="上传" />
</form>Test.php中代码改为
<?php
namespace app\Test\controller;
use think\Db;
use think\Controller;class Test extends Controller
{   public function testsql(){//使用tp框架操作mysql数据库//SELECT * FROM `think_user` WHERE  `id` = 1 LIMIT 1//规矩写法
//    $id=request()->param('x');
//      $data=Db::table('news')->where('id',$id)->find();//原生写法 有安全隐患//$id=request()->param('x');//$data=Db::query("select * from news where id=$id");$username = request()->get('username/a');db('admin')->insert(['username' => $username]);return 'Update success';//return json($data);
}public function upload(){// 获取表单上传文件 例如上传了001.jpg$file = request()->file('image');//获取表单上传文件// 移动到框架应用根目录/uploads/ 目录下$info = $file->validate(['size'=>1567800,'ext'=>'jpg,png,gif'])->move( '../uploads');if($info){// 成功上传后 获取上传信息// 输出 jpgecho $info->getExtension();// 输出 20160820/42a79759f284b767dfcb2a0197904287.jpgecho $info->getSaveName();// 输出 42a79759f284b767dfcb2a0197904287.jpgecho $info->getFilename();}else{// 上传失败获取错误信息echo $file->getError();}}
}在ThinkPHP下创建uploads文件夹,用来存储接收的文件
由于phpstudy中的根目录就是public文件夹,因此可以直接用ip/upload.php来访问

当尝试上传图片时,就会跳转到以下页面

而当上传txt、docx等文件时,就会提醒文件后缀不允许

5、前端页面渲染-MVC 模型

在ThinkPHP—>application—>index下创建view文件夹,再在view下创建index文件夹,其中包含index.html和edit.html。

edit.html代码如下:
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>sabiqudi</title>
</head>
<body>
kcnnqi
</body>
</html>index.html代码如下:
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>{$name}</title>
</head>
<body>
{$email}
</body>
</html>index.php代码如下:
<?php
namespace app\index\controller;
use think\Request;
use think\Controller;class Index extends Controller
{   public function index(){//return 123;$this->assign('name','ThinkPHP');$this->assign('email','thinkphp@qq.com');// 或者批量赋值$this->assign(['name'  => 'ThinkPHP','email' => 'thinkphp@qq.com']);// 模板输出return $this->fetch('');//更改要渲染的页面
}
}当index.php中为return $this->fetch('');时,默认渲染index.html,访问后页面如下:

当index.php中为return $this->fetch('edit');时,渲染edit.html,访问后页面如下:

TP 框架-安全-不安全写法&版本过滤绕过
1、内置代码写法
例子:不合规的代码写法-TP5-自写
 
  
  
  
  
  
  
 2、框架版本安全
例子 1:写法内置安全绕过-TP5-SQL 注入
参考文章:https://www.cnblogs.com/Yhck/p/15808056.html

可以看到,由于这个漏洞出现的版本是5.0.13-5.0.15,5.1.0-5.1.5,所以后续会用到5.0.14版本进行演示。下面先用5.0.22版本做一个对比。

由于5.0.22版本不在漏洞适用范围之内,可以看到页面返回为null

之后用5.0.14版本演示,先在phpstudy中更改路径为5.0.14中的public文件夹

为了看是否指向正确,可以让代码输出123来检验
<?php
namespace app\index\controller;class Index
{public function index(){echo 123;}
}之后也是配置数据库

将index.php中的代码改为
<?php
namespace app\index\controller;class Index
{public function index(){$username = request()->get('username/a');db('users')->where("id")->update(['username'=> $username]);}
}按照下面的命令访问
发现虽然报错,但是直接爆出了数据库名demo01

例子 2:内置版本安全漏洞-TP5-代码执行
 
  
 逻辑越权(类似于linux中的用户等级)
如下图,假设管理员的uid=1,普通会员的uid=100。当使用select * from users where username=‘admin’来取出uid结果时,如果uid=1,则展示管理员页面。
 
  
 相关文章:
 
第27天 安全开发-PHP应用TP 框架路由访问对象操作内置过滤绕过核心漏洞
时间轴 演示案例 TP 框架-开发-配置架构&路由&MVC 模型 TP 框架-安全-不安全写法&版本过滤绕过 TP 框架-开发-配置架构&路由&MVC 模型 参考: https://www.kancloud.cn/manual/thinkphp5_1 1、配置架构-导入使用 去thinkphp官网可以看到&…...
 
应用系统开发(12) Zync中实现数字相敏检波
在 Xilinx Zynq 系列(如 Zynq-7000 或 Zynq UltraScale+)中实现数字相敏检波(DSP,Digital Synchronous Detection)可以通过硬件(PL部分,FPGA逻辑)和软件(PS部分,ARM Cortex-A 处理器)的协同工作来实现。以下是一个详细的设计方法,包括基本原理和 Zynq 的实现步骤。…...
 
栈Stack和队列Queue
目录 一、栈 (1)用数组实现 (2)用单链表实现 (3)用标注尾结点的单链表实现 (4)用双向链表实现 2、栈的实际应用 (1)改变元素的序列 (2&am…...
 
uniapp 微信小程序地图标记点、聚合点/根据缩放重合点,根据缩放登记显示气泡marik标点
如图,如果要实现上方的效果: 上方两个效果根据经纬度标记点缩放后有重复点会添加数量 用到的文档地址https://developers.weixin.qq.com/miniprogram/dev/api/media/map/MapContext.addMarkers.htmlMapContext.addMarkers(Object object) 添加标记点Ma…...
 
Percona XtraBackup备份docker版本mysql 5.7
my.cnf配置文件 [client] default_character_setutf8[mysqld] # 数据存储目录(必须手动指定) datadir/var/lib/mysql/data# 字符集 collation_server utf8_general_ci character_set_server utf8 # 二进制日志 server-id1 log_bin/var/log/mysql/binl…...
C++:关联式容器的介绍及map与set的使用
我们之前已经学习过string,vector,list,queue,priority_queue等容器,这些容器我们统称为序列式容器,因为它们的数据的逻辑结构呈线性。因为这些容器中存储的数据即便二者之间发生交换,也不会对原有的容器结构造成太大影响。 但上篇文章我们介…...
一文说清:Linux下C++静态库的封装和调用
一 引言 《一文说清:windows下C静态库的封装和调用》中说了: 静态库允许开发者在多个项目中复用代码,减少重复劳动,并增强程序的可维护性。并讲述了windows环境下创建、封装以及调用C静态库的过程。 本文则描述了,如…...
 
【Java 学习】数据类型、变量、运算符、条件控制语句
Java基础语法 1. 打印 Hello World !2. 变量类和数据类型2.1 什么是变量?什么是数据类型?2.2 常用的数据类型2.3 使用变量2.4 String 类数据类型2.4.1 String 类基本概念2.4.2 String 类的使用 3. 运算符3.1 算数运算符3.2 关系运算符3.3 逻辑运算符3.4 …...
【软考】系统架构设计师-数据库设计基础
数据库核心考点 三级模式-两级映射 外模式--视图 概念模式--表(模式、基本表) 内模式--物理文件 数据库设计 概念结构设计:属性冲突、命名冲突、结构冲突 逻辑结构设计:关系模式(层次模型、网络模型)…...
【Jmeter相关】
Jmeter 可以作为接口测试问题,也会涉及到性能相关的问题 一、JMeter中用户定义的变量(User Defined Variables)和用户参 数(User Parameters)的区别是什么? 在JMeter中都是用于定义和存储测试数据的方法,但它们有一…...
拍立淘按图搜索API接口系列,返回示例图参考
拍立淘按图搜索API接口允许用户通过上传图片来搜索相似的商品,该接口返回的通常是一个JSON格式的响应,其中包含了与上传图片相似的商品信息。以下是一个基于淘宝平台的拍立淘按图搜索API接口返回数据的JSON格式示例,同时提供对其关键字段的解…...
 
OSG开发笔记(三十二):深入理解相机视口、制作支持与主视图同步变换旋转的相机HUD
若该文为原创文章,未经允许不得转载 本文章博客地址:https://blog.csdn.net/qq21497936/article/details/143852695 各位读者,知识无穷而人力有穷,要么改需求,要么找专业人士,要么自己研究 长沙红胖子Qt…...
 
2024RISC-V中国峰会 演讲幻灯片和视频回放均已公开
目录 一、幻灯片地址: 二、演讲视频: 一、幻灯片地址: RVSC2024/slides at main cnrv/RVSC2024 GitHub 二、演讲视频: RISC-V国际基金会的个人空间-RISC-V国际基金会个人主页-哔哩哔哩视频...
 
河道无人机雷达测流监测系统由哪几部分组成?
在现代水利管理中,河道无人机雷达监测系统正逐渐成为一种重要的工具,为河道的安全和管理提供了强大的技术支持。那么,这个先进的监测系统究竟由哪几部分组成呢? 河道无人机雷达监测系统工作原理 雷达传感器通过发射电磁波或激光束…...
 
28.<Spring博客系统⑤(部署的整个过程(CentOS))>
引入依赖 Spring-boot-maven-plugin 用maven进行打包的时候必须用到这个插件。看看自己pom.xml中有没有这个插件 并且看看配置正确不正常。 注:我们这个项目打的jar包在30MB左右。 <plugin><groupId>org.springframework.boot</groupId><artif…...
 
OpenAI震撼发布:桌面版ChatGPT,Windows macOS双平台AI编程体验!
【雪球导读】 「OpenAI推出ChatGPT桌面端」 OpenAI重磅推出ChatGPT桌面端,全面支持Windows和macOS系统!这款新工具为用户在日常生活和工作中提供了前所未有的无缝交互体验。对于那些依赖桌面端进行开发工作的专业人士来说,这一更新带来了令人…...
香港站群服务器有助于提升网站在搜索引擎中的排名
拥有253个IP的服务器通常被称为多IP站群服务器。这种服务器架构主要用于集中管理多个网站,允许网站管理员通过一个后台管理系统来高效管理和更新这些网站。 一、主要特点 集中管理:多IP站群服务器通过统一的后台管理系统,可以实现对多个网站…...
 
YOLOX:使用自己数据集训练模型及改进--1.YOLOX环境搭建及运行
YOLOX环境搭建及运行 YOLO X网络架构是继YOLO v5后,由旷视科技于2021年提出的新一代anthor-free模型,研究者将网络分为输入端、Backbone、PAFPN及Predication,并在Predication提出Decoupled Head、Anchor-free和Multi positives(后文会详细介绍)。 本篇文章介绍如何通过官…...
 
PyTorch使用教程-深度学习框架
PyTorch使用教程-深度学习框架 1. PyTorch简介 1.1-什么是PyTorch  PyTorch是一个广泛使用的开源机器学习框架,特别适合深度学习的应用。它以其动态计算图而闻名,允许在运行时修改模型,使得实验和调试更加灵活。PyTorch提供了强大的GPU加…...
 
TON商城与Telegram App:生态融合与去中心化未来的精彩碰撞
随着区块链技术的快速发展,去中心化应用(DApp)逐渐成为了数字生态的重要组成部分。而Telegram作为全球领先的即时通讯应用,不仅仅满足于传统的社交功能,更在区块链领域大胆探索,推出了基于其去中心化网络的…...
 
Lombok 的 @Data 注解失效,未生成 getter/setter 方法引发的HTTP 406 错误
HTTP 状态码 406 (Not Acceptable) 和 500 (Internal Server Error) 是两类完全不同的错误,它们的含义、原因和解决方法都有显著区别。以下是详细对比: 1. HTTP 406 (Not Acceptable) 含义: 客户端请求的内容类型与服务器支持的内容类型不匹…...
 
CMake基础:构建流程详解
目录 1.CMake构建过程的基本流程 2.CMake构建的具体步骤 2.1.创建构建目录 2.2.使用 CMake 生成构建文件 2.3.编译和构建 2.4.清理构建文件 2.5.重新配置和构建 3.跨平台构建示例 4.工具链与交叉编译 5.CMake构建后的项目结构解析 5.1.CMake构建后的目录结构 5.2.构…...
【解密LSTM、GRU如何解决传统RNN梯度消失问题】
解密LSTM与GRU:如何让RNN变得更聪明? 在深度学习的世界里,循环神经网络(RNN)以其卓越的序列数据处理能力广泛应用于自然语言处理、时间序列预测等领域。然而,传统RNN存在的一个严重问题——梯度消失&#…...
 
SpringBoot+uniapp 的 Champion 俱乐部微信小程序设计与实现,论文初版实现
摘要 本论文旨在设计并实现基于 SpringBoot 和 uniapp 的 Champion 俱乐部微信小程序,以满足俱乐部线上活动推广、会员管理、社交互动等需求。通过 SpringBoot 搭建后端服务,提供稳定高效的数据处理与业务逻辑支持;利用 uniapp 实现跨平台前…...
Axios请求超时重发机制
Axios 超时重新请求实现方案 在 Axios 中实现超时重新请求可以通过以下几种方式: 1. 使用拦截器实现自动重试 import axios from axios;// 创建axios实例 const instance axios.create();// 设置超时时间 instance.defaults.timeout 5000;// 最大重试次数 cons…...
 
VM虚拟机网络配置(ubuntu24桥接模式):配置静态IP
编辑-虚拟网络编辑器-更改设置 选择桥接模式,然后找到相应的网卡(可以查看自己本机的网络连接) windows连接的网络点击查看属性 编辑虚拟机设置更改网络配置,选择刚才配置的桥接模式 静态ip设置: 我用的ubuntu24桌…...
Caliper 负载(Workload)详细解析
Caliper 负载(Workload)详细解析 负载(Workload)是 Caliper 性能测试的核心部分,它定义了测试期间要执行的具体合约调用行为和交易模式。下面我将全面深入地讲解负载的各个方面。 一、负载模块基本结构 一个典型的负载模块(如 workload.js)包含以下基本结构: use strict;/…...
libfmt: 现代C++的格式化工具库介绍与酷炫功能
libfmt: 现代C的格式化工具库介绍与酷炫功能 libfmt 是一个开源的C格式化库,提供了高效、安全的文本格式化功能,是C20中引入的std::format的基础实现。它比传统的printf和iostream更安全、更灵活、性能更好。 基本介绍 主要特点 类型安全:…...
 
什么是VR全景技术
VR全景技术,全称为虚拟现实全景技术,是通过计算机图像模拟生成三维空间中的虚拟世界,使用户能够在该虚拟世界中进行全方位、无死角的观察和交互的技术。VR全景技术模拟人在真实空间中的视觉体验,结合图文、3D、音视频等多媒体元素…...
 
rknn toolkit2搭建和推理
安装Miniconda Miniconda - Anaconda Miniconda 选择一个 新的 版本 ,不用和RKNN的python版本保持一致 使用 ./xxx.sh进行安装 下面配置一下载源 # 清华大学源(最常用) conda config --add channels https://mirrors.tuna.tsinghua.edu.cn…...




