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

目录

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){
        // 成功上传后,获取上传信息

        // 输出文件扩展名,例如 jpg
        echo $info->getExtension();
        echo '<br>';

        // 输出文件保存路径,例如 20160820/42a79759f284b767dfcb2a0197904287.jpg
        echo $info->getSaveName();
        echo '<br>';

        // 输出文件名,例如 42a79759f284b767dfcb2a0197904287.jpg
        echo $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中查看

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

思维导图

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/444343.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

网络触手获取天气数据存入mysql 项目

首先这个案例不一定能直接拿来用&#xff0c;虽然我觉得可以但是里面肯定有一些我没考虑到的地方。 有问题评论或者私信我&#xff1a; 这个案例适合我这种学生小白 获取天气数据网址&#xff1a; https://lishi.tianqi.com/xianyang/202201.html 网络触手获取天气数据代码直…

Svg Flow Editor 原生svg流程图编辑器(二)

系列文章 Svg Flow Editor 原生svg流程图编辑器&#xff08;一&#xff09; 说明 这项目也是我第一次写TS代码哈&#xff0c;现在还被绕在类型中头昏脑胀&#xff0c;更新可能会慢点&#xff0c;大家见谅~ 目前实现的功能&#xff1a;1. 元件的创建、移动、形变&#xff1b;2…

运动想象 (MI) 迁移学习系列 (3) : MSFT

运动想象迁移学习系列:MSFT 0. 引言1. 主要贡献2. 数据增强方法3. 基于度量的空间滤波转换器3.1 空间过滤3.2 脑电图ViT3.2.1 变压器编码器层3.2.2 基于度量的损失函数 4. 实验结果4.1 消融实验4.2 基线任务对比4.3 跨主题 5. 总结欢迎来稿 论文地址&#xff1a;https://www.s…

深入浅出计算机网络 day.1 概论② 因特网概述

当你回头看的时候&#xff0c;你会发现自己走了一段&#xff0c;自己都没想到的路 —— 24.3.9 内容概述 01.网络、互连&#xff08;联&#xff09;网与因特网的区别与联系 02.因特网简介 一、网络、互连&#xff08;联&#xff09;网与因特网的区别与联系 1.若干节点和链路互连…

Java 客户端向服务端上传文件(TCP通信)

一、实验内容 编写一个客户端向服务端上传文件的程序&#xff0c;要求使用TCP通信的的知识&#xff0c;完成将本地机器输入的路径下的文件上传到D盘中名称为upload的文件夹中。并把客户端的IP地址加上count标识作为上传后文件的文件名&#xff0c;即IP&#xff08;count&#…

excel统计分析——嵌套设计

参考资料&#xff1a;生物统计学&#xff0c;巢式嵌套设计的方差分析 嵌套设计&#xff08;nested design&#xff09;也称为系统分组设计或巢式设计&#xff0c;是把试验空间逐级向低层次划分的试验设计方法。与裂区设计相似&#xff0c;先按一级因素设计试验&#xff0c;然后…

Linux网络套接字之预备知识

(&#xff61;&#xff65;∀&#xff65;)&#xff89;&#xff9e;嗨&#xff01;你好这里是ky233的主页&#xff1a;这里是ky233的主页&#xff0c;欢迎光临~https://blog.csdn.net/ky233?typeblog 点个关注不迷路⌯▾⌯ 目录 一、预备知识 1.理解源IP地址和目的IP地址 …

真实案例分享:MOS管电源开关电路,遇到上电冲击电流超标

做硬件&#xff0c;堆经验。 分享一个案例&#xff1a;MOS管电源开关电路&#xff0c;遇到上电冲击电流超标&#xff0c;怎么解决的呢&#xff1f; 下面是正文部分。 —— 正文 —— 最近有一颗用了挺久的MOSFET发了停产通知&#xff0c;供应链部门找到我们研发部门&#xff0c…

RabbitMQ发布确认高级版

1.前言 在生产环境中由于一些不明原因&#xff0c;导致 RabbitMQ 重启&#xff0c;在 RabbitMQ 重启期间生产者消息投递失败&#xff0c; 导致消息丢失&#xff0c;需要手动处理和恢复。于是&#xff0c;我们开始思考&#xff0c;如何才能进行 RabbitMQ 的消息可靠投递呢&…

C++——string模拟实现

前言&#xff1a;上篇文章我们对string类及其常用的接口方法的使用进行了分享&#xff0c;这篇文章将着重进行对这些常用的接口方法的内部细节进行分享和模拟实现。 目录 一.基础框架 二.遍历字符串 1.[]运算符重载 2.迭代器 3.范围for 三.常用方法 1.增加 2.删除 3.调…

spring boot 2.4.x 之前版本(对应spring-cloud-openfeign 3.0.0之前版本)feign请求异常逻辑

目录 feign SynchronousMethodHandler 第一部分 第二部分 第三部分 spring-cloud-openfeign LoadBalancerFeignClient ribbon AbstractLoadBalancerAwareClient 在之前写的文章配置基础上 https://blog.csdn.net/zlpzlpzyd/article/details/136060312 因为从 spring …

Excel F4键的作用

目录 一. 单元格相对/绝对引用转换二. 重复上一步操作 一. 单元格相对/绝对引用转换 ⏹ 使用F4键 如下图所示&#xff0c;B1单元格引用了A1单元格的内容。此时是使用相对引用&#xff0c;可以按下键盘上的F4键进行相对引用和绝对引用的转换。 二. 重复上一步操作 ⏹添加或删除…

【Python】装饰器函数

专栏文章索引&#xff1a;Python 原文章&#xff1a;装饰器函数基础_装饰函数-CSDN博客 目录 1. 学习装饰器的基础 2.最简单的装饰器 3.闭包函数装饰器 4.装饰器将传入的函数中的值大写 5. 装饰器的好处 6. 多个装饰器的执行顺序 7. 装饰器传递参数 8. 结语 1. 学习装饰…

c++中string的模拟实现(超详细!!!)

1.string的成员变量、&#xff08;拷贝&#xff09;构造、析构函数 1.1.成员变量 private:char* _str;size_t _size; //string中有效字符个数size_t _capacity; //string中能存储有效字符个数的大小 1.2&#xff08;拷贝&#xff09;构造函数 //构造函数string(const char* …

Chain of Verification(验证链、CoVe)—理解与实现

原文地址&#xff1a;Chain of Verification (CoVe) — Understanding & Implementation 2023 年 10 月 9 日 GitHub 存储库 介绍 在处理大型语言模型&#xff08;LLM&#xff09;时&#xff0c;一个重大挑战&#xff0c;特别是在事实问答中&#xff0c;是幻觉问题。当答案…

React-路由导航

1.声明式路由导航 1.1概念 说明&#xff1a;声明式导航是指通过在模版中通过<Link/>组件描述出要跳转到哪里去&#xff0c;比如后台管理系统的左侧菜单通常使用这种方式进行。 import {Link} from "react-router-dom" const Login()>{return (<div>…

资源哟正版无授权模版源码(含搭建教程)

资源哟 v1.3 – 新增两种首页布局 – 新增幻灯片插件 – 优化深色模式颜色效果 – 优化导航页面左侧栏目跳转效果 – 优化后台辅助插件当前页面打开 源码下载&#xff1a;https://download.csdn.net/download/m0_66047725/88898100 更多资源下载&#xff1a;关注我。

Linux多线程之线程控制

(&#xff61;&#xff65;∀&#xff65;)&#xff89;&#xff9e;嗨&#xff01;你好这里是ky233的主页&#xff1a;这里是ky233的主页&#xff0c;欢迎光临~https://blog.csdn.net/ky233?typeblog 点个关注不迷路⌯▾⌯ 目录 一、pthread_crate 二、pthread_join 三、p…

RAG、数据隐私、攻击方法和安全提示

原文地址&#xff1a;RAG, Data Privacy, Attack Methods & Safe-Prompts 最近的一项研究探讨了 RAG 安全漏洞以及通过检索数据集访问私有数据的方式。还讨论了防御和安全提示工程示例。 介绍 RAG 在构建生成式 AI 应用程序中非常受欢迎。RAG 在生成式 AI 应用中采用的原因…

Elasticsearch架构原理

一. Elasticsearch架构原理 1、Elasticsearch的节点类型 在Elasticsearch主要分成两类节点&#xff0c;一类是Master&#xff0c;一类是DataNode。 1.1 Master节点 在Elasticsearch启动时&#xff0c;会选举出来一个Master节点。当某个节点启动后&#xff0c;然后使用Zen D…