Day27:安全开发-PHP应用TP框架路由访问对象操作内置过滤绕过核心漏洞

news/2025/2/19 13:22:23/

目录

TP框架-开发-配置架构&路由&MVC模型

TP框架-安全-不安全写法&版本过滤绕过

思维导图


PHP知识点

功能:新闻列表,会员中心,资源下载,留言版,后台模块,模版引用,框架开发等

技术:输入输出,超全局变量,数据库操作,逻辑架构,包含上传&下载删除;

技术:JS&CSS混用,Cookie,Session操作,MVC架构,ThinkPHP引用等。

TP框架-开发-配置架构&路由&MVC模型

参考:https://www.kancloud.cn/manual/thinkphp5_1

1、配置架构-导入使用

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/index
index.php:/thinkphp/public/index.php
index: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中查看

依据版本号去查找,出现过的漏洞,进行复现即可(没有绝对的安全)

思维导图


http://www.ppmy.cn/news/1380167.html

相关文章

Vue3全家桶 - Pinia - 【1】(安装与使用 + Store + State + Getters + Actions)

Pinia pinia 是 Vue 的专属状态管理库&#xff0c;它允许你跨组件或跨页面共享状态&#xff1b; 一、 安装与使用 pinia 安装语法&#xff1a;yarn add pinia npm install pinia创建一个 pinia &#xff08;根存储&#xff09;并将其传递给应用程序&#xff1a; 目标文件&am…

抽样算法——【数据科学与工程算法基础】

一、前言 这是课程的第二章节——抽样算法&#xff0c;主要分为三类。 详情可参考&#xff1a; 数据科学的算法基础——学习记录跳转中心 二、正篇 1.系统抽样 课本只介绍了最简单的——等距抽样。 直线等距抽样&#xff08;Nn*k&#xff09;&#xff1a;即总体个数可以被抽…

C++面试题和笔试题(三)

目录 一、在C中&#xff0c;局部变量、静态局部变量、全局 变量、静态全局变量各自的作用域和生命周期是怎样的&#xff1f; 二、描述const 关键字在指针和引用上的使用方式及意义&#xff0c;如const int *p与int const *p有何区别&#xff0c;又如何int*const p和const int*…

怎么把多首歌曲合并一首?轻松几步教你合并音乐!

音乐合并播放&#xff0c;听起来像是一个简单的操作&#xff0c;但实际上涉及到的技术和步骤却不少。音乐的合并不仅仅是将两首或多首曲目简单地串联在一起&#xff0c;更需要考虑到音乐的节奏、旋律、和声等要素&#xff0c;以及合并后的整体效果。在数字音乐日益普及的今天&a…

嵌入式学习第二十七天!(TCP并发模型)

TCP并发模型&#xff1a; 1. TCP多线程模型&#xff1a; 缺点&#xff1a;创建线程会带来资源开销&#xff0c;能够实现的并发量比较有限。 2. IO模型&#xff1a; 1. 阻塞IO&#xff1a; 没有数据到来时&#xff0c;可以让任务挂起&#xff0c;节省CPU资源开销&#xff0c;提…

opengl 学习(三)-----着色器

着色器 分类demo效果解析教程 分类 OPengl C demo #include "glad/glad.h" #include "glfw3.h" #include <iostream> #include <cmath> #include <vector>#include <string> #include <fstream> #include <sstream>…

智慧公厕的意义:高效智能的公共厕所运营、服务、协作管理

现代城市的发展离不开智慧技术的引领&#xff0c;而智慧公厕作为城市基础设施的重要组成部分&#xff0c;正在逐渐展现其巨大的意义和价值。通过采用智能管理系统&#xff0c;智慧公厕实现了更高效的管理、更贴心的服务和更协同的业务流程。本文以智慧公厕源头实力厂家广州中期…

Git是一个分布式版本控制系统 一.2

Git是一个分布式版本控制系统&#xff0c;用于跟踪和管理代码的变化。它最初由Linus Torvalds于2005年创建&#xff0c;并成为开源社区中最流行的版本控制系统之一。 Git的主要特点包括&#xff1a; 分布式&#xff1a;每个开发者都可以在本地拥有完整的代码仓库&#xff0c;并…