Day27:安全开发-PHP应用TP框架路由访问对象操作内置过滤绕过核心漏洞
目录
TP框架-开发-配置架构&路由&MVC模型
TP框架-安全-不安全写法&版本过滤绕过
思维导图
PHP知识点
功能:新闻列表,会员中心,资源下载,留言版,后台模块,模版引用,框架开发等
技术:输入输出,超全局变量,数据库操作,逻辑架构,包含上传&下载删除;
技术:JS&CSS混用,Cookie,Session操作,MVC架构,ThinkPHP引用等。
TP框架-开发-配置架构&路由&MVC模型
参考:https://www.kancloud.cn/manual/thinkphp5_11、配置架构-导入使用
2、路由访问-URL访问
3、数据库操作-应用对象
4、文件上传操作-应用对象
5、前端页面渲染-MVC模型
配置架构-导入使用修改小皮网址目录:G:\develop\safety\phpstudy_pro\WWW\dome01\thinkphp\public
127.0.0.1成功访问
路由访问-URL访问访问方式需要按照,特定的访问方式才能访问到官方的说法:
框架中:/thinkphp/public/index.php当你输入:127.0.0.1时,就会访问application文件夹下
127.0.0.1 <==> 127.0.0.1/index.php/index/indexindex.php:/thinkphp/public/index.phpindex:index这个包index:/index/index.php这个文件如果想返回域名或表单中输入的参数中的内容
- 首先需要导入think\Controller类,Controller类是ThinkPHP框架提供的基础控制器类,你的Index类继承了这个控制器类。通过继承Controller**,你可以使用框架提供的一些基础控制器功能,比如处理请求和响应。
- 其次完成代码回写
<?php namespace app\index\controller; **use think\Controller;**class Index extends Controller {// index方法用于处理首页请求public function index(){// 返回一个包含样式和内容的字符串return '<style type="text/css">*{ padding: 0; margin: 0; } .think_default_text{ padding: 4px 48px;} a{color:#2E5CD5;cursor: pointer;text-decoration: none} a:hover{text-decoration:underline; } body{ background: #fff; font-family: "Century Gothic","Microsoft yahei"; color: #333;font-size:18px} h1{ font-size: 100px; font-weight: normal; margin-bottom: 12px; } p{ line-height: 1.6em; font-size: 42px }</style><div style="padding: 24px 48px;"> <h1>:)</h1><p> ThinkPHP V5<br/><span style="font-size:30px">十年磨一剑 - 为API开发设计的高性能框架</span></p><span style="font-size:22px;">[ V5.0 版本由 <a href="http://www.qiniu.com" target="qiniu">七牛云</a> 独家赞助发布 ]</span></div><script type="text/javascript" src="http://tajs.qq.com/stats?sId=9347272" charset="UTF-8"></script><script type="text/javascript" src="http://ad.topthink.com/Public/static/client.js"></script><thinkad id="ad_bd568ce7058a1091"></thinkad>';}**// xi方法用于处理名为xi的请求,返回请求参数中的'name'public function xi(){// 返回请求参数中的'name'return $this->request->param('name');}** }
访问有两种方式:192.168.137.1:84/index.php/Index/index/xi/name/xiaosedi
192.168.137.1:84/index.php/Index/index/xi?name=wusuowei
如果是使用php自带的请求方式访问则:只支持一种方式回写数据
192.168.137.1:84/index.php/Index/index/xi?x=123456如果创建新的目录,例如application→text→controller→Test.php等
数据库操作-应用对象数据库配置文件:
引用数据的的类use think\Db;,使用数据库的查询语句use think\Db; public function testsql(){//SELECT * FROM `think_user` WHERE `id` = 1 LIMIT 1// table方法必须指定完整的数据表名$data = Db::table('news')->where('id', 1)->findOrFail();return json($data);}
开启调试设置,会在浏览器打印出错误信息
thinkphp的安全过滤:
- 如果是原生态php的话,数据库操作没有过滤就会受到SQL注入攻击
- ThinkPHP框架提供了一些内置的数据库操作方法,使得对数据库的访问更加便捷和安全使用ThinkPHP框架操作数据库 默认是受到框架内置的过滤保护
public function testsql(){//SELECT * FROM `think_user` WHERE `id` = 1 LIMIT 1//使用TP框架操作数据库 默认是受到框架内置的过滤保护$id = request()->param('x');$data = Db::table('news')->where('id', $id)->find();return json($data);}
文件上传操作-应用对象在配置好的网址根目录public下创建upload.html
在upload.html中写入以下代码,并修改action的地址
<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中输入以下代码(此代码对于上传文件,进行了诸多过滤,保证了安全性)public function upload(){// 获取表单上传文件,例如上传了001.jpg$file = request()->file('image');// 移动到框架应用根目录/uploads/ 目录下$info = $file->validate(['ext'=>'jpg,png,gif'])->move('../uploads');if($info){// 成功上传后,获取上传信息// 输出文件扩展名,例如 jpgecho $info->getExtension();echo '<br>';// 输出文件保存路径,例如 20160820/42a79759f284b767dfcb2a0197904287.jpgecho $info->getSaveName();echo '<br>';// 输出文件名,例如 42a79759f284b767dfcb2a0197904287.jpgecho $info->getFilename();} else {// 上传失败,获取错误信息echo $file->getError();} }
前端页面渲染-MVC模型在例如index(需要渲染的文件当前并行目录下)→view→index→index.html等
http://192.168.137.1:84/index.php/Index/index/index 输入对应的路由访问即可看到以及渲染的页面
![]()
也可以指定内容可以指定模板
public function index(){**//可以一一赋值$this->assign('name','ThinkPHP');$this->assign('email','thinkphp@qq.com');//可以批量赋值$this->assign(['name' == 'ThinkPHP','email' == 'thinkphp@qq.com']);//模板输出return $this->fetch('index/edit');}
TP框架-安全-不安全写法&版本过滤绕过
1、内置代码写法,原生写法例子:不合规的代码写法-TP5-自写
2、框架版本安全,框架漏洞
例子1:写法内置安全绕过-TP5-SQL注入
例子2:内置版本安全漏洞-TP5-代码执行
判断漏洞的方式:首先判断代码写法如果是不安全写法直接通过代码回写使用sql注入,如果是安全写法则判断中间框架版本号,依据版本号去寻找存在的漏洞
内置代码写法,原生写法
例子:不合规的代码写法-TP5-自写
1、使用TP框架操作数据库 默认是受到框架内置过滤保护
2、原生态的数据库操作如果没有过滤就会受到SQL注入攻击
安全写法=推荐写法 不安全写法=原生写法(不会受到保护)
安全写法:
规矩写法:不是绝对安全 看两点
看版本的内置绕过漏洞 同样也有漏洞$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");
纯原生写法(完全不是用TP语法)
// 从GET请求中获取id参数,如果不存在则默认为1 $id = $_GET['id'] ?? '1';// 构建SQL查询语句 $sql = "select * from news where id=$id"; echo $sql;// 执行查询并获取结果集 $data = mysqli_query($con, $sql);// 使用mysqli_fetch_row遍历结果集的每一行 while ($row = mysqli_fetch_row($data)) {// 从结果集中获取每一列的值,并存储到相应的变量中$page_title = $row[1];$heading = $row[2];$subheading = $row[3];$content = $row[4];$item = $row[5]; }
框架版本安全,框架漏洞
首先查看中间框架的版本是什么,如ThinkPHP的版本在thinkphp→thinkphp→tpl→base.php中查看
依据版本号去查找,出现过的漏洞,进行复现即可(没有绝对的安全)
思维导图
相关文章:

Day27:安全开发-PHP应用TP框架路由访问对象操作内置过滤绕过核心漏洞
目录 TP框架-开发-配置架构&路由&MVC模型 TP框架-安全-不安全写法&版本过滤绕过 思维导图 PHP知识点 功能:新闻列表,会员中心,资源下载,留言版,后台模块,模版引用,框架开发等 技…...

c++: 引用能否替代指针? 详解引用与指针的区别.
文章目录 前言1. 引用和指针的最大区别:引用不能改变指向2. 引用和指针在底层上面是一样的3. 引用和指针在sizeof面前大小不同4. 有多级指针,没有多级引用5.引用是引用的实体,指针会向后偏移同一个类型的大小 总结 前言 新来的小伙伴如果不知道引用是什么?可以看我的上一篇文…...

Java项目源码基于springboot的家政服务平台的设计与实现
大家好我是程序员阿存,在java圈的辛苦码农。辛辛苦苦板砖,今天要和大家聊的是一款Java项目源码基于springboot的家政服务平台的设计与实现,项目源码以及部署相关请联系存哥,文末附上联系信息 。 项目源码:Java基于spr…...

十大排序算法(冒泡排序、插入排序、选择排序、希尔排序、堆排序、快排、归并排序、桶排序、计数排序、基数排序)
目录 一、冒泡排序: 二、插入排序: 三、选择排序: 四、希尔排序: 五、堆排序: 六、快速排序: 6.1挖坑法: 6.2左右指针法 6.3前后指针法: 七、归并排序: 八、桶…...

matplotlib 画多子图的时候添加图例/legend
一开始搞不懂图例是什么意思,以为是整个图,最后发现原来图例就是代码中的legend: 子图的图例(legend)用于解释图表中各条线、点或其他元素所代表的含义。图例通常位于图表的一角,以帮助观众理解图表中展示的…...
手写一个线程池
自己手动写一个线程池的必要条件需要先了解我们使用的线程池的功能。为什么会有线程池?这是为了减少线程创建和销毁的开销。复用线程的目的。为了达到这个目的。预计方案是:需要一个存放任务的队列,主线程相当于生产者,在这个队列…...

Spring Boot 多环境配置
Spring Boot 多环境配置 在现代的软件开发中,通常需要将应用程序部署到不同的环境中,如开发环境、生产环境和测试环境等。每个环境可能需要不同的配置参数,例如数据库连接信息、日志级别等。在 Spring Boot 中,我们可以通过简单的…...

【Python】一文带你详解sys.executable函数的作用
【Python】一文带你详解sys.executable函数的作用 🌈 个人主页:高斯小哥 🔥 高质量专栏:Matplotlib之旅:零基础精通数据可视化、Python基础【高质量合集】、PyTorch零基础入门教程👈 希望得到您的订阅和支…...

thingsboard如何自定义udp-transport
0、参考netty实现udp的文章 https://github.com/narkhedesam/Netty-Simple-UDP-TCP-server-client/blob/master/netty-udp/src/com/sam/netty_udp/server/MessageDecoder.java 调试工具使用的是:卓岚TCP&UDP调试工具 1、在common\transport下面创建udp模块,仿照mqtt的创…...

【汇编】#3 8086与数据有关的寻址方式
文章目录 操作码与操作数1. 8086处理器的与数据有关的寻址方式1.1 立即数寻址方式1.2 寄存器寻址方式 2. 有效(偏移)地址(effective address,EA)与缺省段寄存器选择tips:段跨越前缀2.1 直接寻址tips:直接寻址与立即寻址…...

【数据结构】单链表的层层实现!! !
关注小庄 顿顿解馋(●’◡’●) 上篇回顾 我们上篇学习了本质为数组的数据结构—顺序表,顺序表支持下标随机访问而且高速缓存命中率高,然而可能造成空间的浪费,同时增加数据时多次移动会造成效率低下,那有什么解决之法呢ÿ…...

丰田研究所(TRI)最新成果——可实现全身操控的软体机器人Punyo
文 | BFT机器人 人形机器人在近年的科技浪潮中迅速崛起,成为了各界瞩目的焦点,众多企业纷纷推出自家的机器人模型,但仔细观察,不难发现它们中的许多在操作方式上仍显得颇为相似。这些典型的人形机器人,以其机械臂和抓…...

【PyTorch实战演练】深入剖析MTCNN(多任务级联卷积神经网络)并使用30行代码实现人脸识别
文章目录 0. 前言1. 级联神经网络介绍2. MTCNN介绍2.1 MTCNN提出背景2.2 MTCNN结构 3. MTCNN PyTorch实战3.1 facenet_pytorch库中的MTCNN3.2 识别图像数据3.3 人脸识别3.4 关键点定位 0. 前言 按照国际惯例,首先声明:本文只是我自己学习的理解ÿ…...
MFC中字符串string类型和CString类型互转方法
在Microsoft Foundation Classes (MFC)中,CString是一个非常方便的类,用于处理C风格的字符串。有时,你可能需要在MFC的CString和C标准库中的std::string之间进行转换。下面是如何在两者之间进行转换的方法: CString转std::string…...

Jmeter-使用http proxy代理录制脚本
Jmeter-使用http proxy代理录制脚本 第1步:打卡jmeter工具新增1个线程组 第2步:给线程组添加1个HTTP请求默认值 第3步:设置下HTTP请求默认值第4步:在工作台中新增1个----HTTP代理服务器 第5步:设置HTTP代理服务器 …...
C++训练营:new 运算符
大家好: 衷心希望各位点赞。 您的问题请留在评论区,我会及时回答。 一、new 运算符 new 运算符用于动态分配一片内存空间,并返回这片内存空间的首地址,可将该首地址存入一个指针变量中,主要有以下三种格式。 二、格…...

C# 用Trace.WriteLine输出调试信息无法查看
写程序就会遇见BUG,这时候在代码不同部位输出一些标记的信息对查找错误非常有必要,一般情况下我们都是使用Console.WriteLine()方法来打印信息到控制台窗口,但有时候使用Console.WriteLine()方法会存在不方便的情况,比如鄙人遇到的…...

【Echarts】柱状图上方显示数字以及自定义值,标题和副标题居中,鼠标上显示信息以及自定义信息
欢迎来到《小5讲堂》 大家好,我是全栈小5。 这是《前端》系列文章,每篇文章将以博主理解的角度展开讲解, 特别是针对知识点的概念进行叙说,大部分文章将会对这些概念进行实际例子验证,以此达到加深对知识点的理解和掌握…...

HTML 语义化:构建优质网页的关键
🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 🍚 蓝桥云课签约作者、上架课程《Vue.js 和 E…...
Flutter入门学习——Flutter和Dart
因为工作的需要,也为了个人发展,现在的话,转战Flutter跨端开发了,虽然目前的项目只发了android端,但是那天尝试了一下Ios的打包流程,也能运行,只是IOS那边的打包稍微复杂一些。 差不多学习了一…...
conda相比python好处
Conda 作为 Python 的环境和包管理工具,相比原生 Python 生态(如 pip 虚拟环境)有许多独特优势,尤其在多项目管理、依赖处理和跨平台兼容性等方面表现更优。以下是 Conda 的核心好处: 一、一站式环境管理:…...
在 Nginx Stream 层“改写”MQTT ngx_stream_mqtt_filter_module
1、为什么要修改 CONNECT 报文? 多租户隔离:自动为接入设备追加租户前缀,后端按 ClientID 拆分队列。零代码鉴权:将入站用户名替换为 OAuth Access-Token,后端 Broker 统一校验。灰度发布:根据 IP/地理位写…...

(二)原型模式
原型的功能是将一个已经存在的对象作为源目标,其余对象都是通过这个源目标创建。发挥复制的作用就是原型模式的核心思想。 一、源型模式的定义 原型模式是指第二次创建对象可以通过复制已经存在的原型对象来实现,忽略对象创建过程中的其它细节。 📌 核心特点: 避免重复初…...
【HTTP三个基础问题】
面试官您好!HTTP是超文本传输协议,是互联网上客户端和服务器之间传输超文本数据(比如文字、图片、音频、视频等)的核心协议,当前互联网应用最广泛的版本是HTTP1.1,它基于经典的C/S模型,也就是客…...
高防服务器能够抵御哪些网络攻击呢?
高防服务器作为一种有着高度防御能力的服务器,可以帮助网站应对分布式拒绝服务攻击,有效识别和清理一些恶意的网络流量,为用户提供安全且稳定的网络环境,那么,高防服务器一般都可以抵御哪些网络攻击呢?下面…...
C++八股 —— 单例模式
文章目录 1. 基本概念2. 设计要点3. 实现方式4. 详解懒汉模式 1. 基本概念 线程安全(Thread Safety) 线程安全是指在多线程环境下,某个函数、类或代码片段能够被多个线程同时调用时,仍能保证数据的一致性和逻辑的正确性…...

HDFS分布式存储 zookeeper
hadoop介绍 狭义上hadoop是指apache的一款开源软件 用java语言实现开源框架,允许使用简单的变成模型跨计算机对大型集群进行分布式处理(1.海量的数据存储 2.海量数据的计算)Hadoop核心组件 hdfs(分布式文件存储系统)&a…...
在QWebEngineView上实现鼠标、触摸等事件捕获的解决方案
这个问题我看其他博主也写了,要么要会员、要么写的乱七八糟。这里我整理一下,把问题说清楚并且给出代码,拿去用就行,照着葫芦画瓢。 问题 在继承QWebEngineView后,重写mousePressEvent或event函数无法捕获鼠标按下事…...

Python 实现 Web 静态服务器(HTTP 协议)
目录 一、在本地启动 HTTP 服务器1. Windows 下安装 node.js1)下载安装包2)配置环境变量3)安装镜像4)node.js 的常用命令 2. 安装 http-server 服务3. 使用 http-server 开启服务1)使用 http-server2)详解 …...
基于鸿蒙(HarmonyOS5)的打车小程序
1. 开发环境准备 安装DevEco Studio (鸿蒙官方IDE)配置HarmonyOS SDK申请开发者账号和必要的API密钥 2. 项目结构设计 ├── entry │ ├── src │ │ ├── main │ │ │ ├── ets │ │ │ │ ├── pages │ │ │ │ │ ├── H…...