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

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

thinkphp5.1

复制代码
application/
└── index/          ← 模块名 index
└── controller/ ← 控制器目录(不参与 URL)
  └── Index.php ← 控制器文件

index.php / 模块 / 控制器 / 方法

访问:index.php / index / Index / index
app\index\controller\Index::index()
测试代码
复制代码
http://thinkphp5.com/index.php/index/index/hello/name/112719413
php 复制代码
<?php
namespace app\index\controller;

use think\Request;
class Index
{
    public function index()
    {
        return 123;

    }

    public function hello(Request $request)
    {
        return 'hello,' . $request->param('name');
    }
}

可以添加test目录进行测试

MVC

model view controller

模版 视图 控制器

MySQL测试
php 复制代码
<?php
namespace app\test\controller;
use think\Db;
use think\Request;

class Test
{
    public function index()
    {
        return 'nskjkdbksbd';
    }

    public function hello(Request $request)
    {
        return '7777,' . $request->param('name');
    }

    public function testsql()
    {
        $id=request()->param('x');
        $data = Db::table('new')->where('id',$id)->select();
        return json($data);
    }
}
复制代码
http://thinkphp5.com/index.php/test/test/testsql/x/1
http://thinkphp5.com/index.php/test/test/testsql/x/1%20or%201=1
内置过滤,只有1的时候有用,如果是"1 and 2=1"之类的没有任何反应

实验结果表名:使用thinkphp有内置过滤,比原生态代码强,防止SQL注入

1、使用TP框架操作数据库 默认是收到框架内置过滤保护

2、原生态的数据库操作 如果没有过滤就会受到SQL注入攻击

文件上传

在之前的test/controller/Test.php 改成下面代码

php 复制代码
<?php
namespace app\test\controller;
use think\Db;
use think\Request;
public function upload(){
        // 获取表单上传文件 例如上传了001.jpg
        $file = request()->file('image');
        // 移动到框架应用根目录/uploads/ 目录下
        $info = $file->validate(['size'=>15678,'ext'=>'jpg,png,gif'])->move( '../uploads');
        if($info){
            // 成功上传后 获取上传信息
            // 输出 jpg
            echo $info->getExtension();
            // 输出 20160820/42a79759f284b767dfcb2a0197904287.jpg
            echo $info->getSaveName();
            // 输出 42a79759f284b767dfcb2a0197904287.jpg
            echo $info->getFilename();
        }else{
            // 上传失败获取错误信息
            echo $file->getError();
        }
    }

在public目录里创一个upload.html文件

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>
复制代码
http://thinkphp5.com/upload.html
访问上传测试即可
view
view渲染

渲染模板最常用的是控制器类在继承系统控制器基类(\think\Controller)后调用fetch方法,调用格式:

fetch('[模板文件]'[,'模板变量(数组)'])

模板文件的写法支持下面几种:

用法 描述
不带任何参数 自动定位当前操作的模板文件
[模块@][控制器/][操作] 常用写法,支持跨模块
完整的模板文件名 直接使用完整的模板文件名(包括模板后缀)

下面是一个最典型的用法,不带任何参数:

php 复制代码
<?php
namespace app\index\controller;
use think\Controller;
use think\Request;
class Index extends Controller
{
    public function index()
    {
        return $this->fetch();


    public function hello(Request $request)
    {
        return 'hello,' . $request->param('name');
    }
}

表示系统会按照默认规则自动定位模板文件,其规则是:

复制代码
当前模块/view/当前控制器名(小写)/当前操作(小写).html

application/
└── index/          ← 模块名 index
└── controller/ ← 控制器目录(不参与 URL)
   └── Index.php ← 控制器文件
└── view/
	└── index/
		└── index.html

访问:http://thinkphp5.com/index.php/index/index/index
view赋值
复制代码
application/
└── index/          ← 模块名 index
└── controller/ ← 控制器目录(不参与 URL)
   └── Index.php ← 控制器文件
└── view/
	└── index/
		└── index.html
		└── test.html

Index.php

php 复制代码
<?php
namespace app\index\controller;
use think\Controller;
use think\Request;
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');//这里可以修改,换成test
    }

}

index.html

html 复制代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>{$name}</title>
</head>
<body>
{$email}
</body>
</html>

test.html

html 复制代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>{$email}</title>
</head>
<body>
这里是test
</body>
</html>

看安全

1、版本漏洞

版本的内置安全漏洞

2、安全写法

3、半安全+半原生

4、原生写法

弹幕

思路流程,根据抓包获取特征文件,去github或者gitee搜索特征文件,尝试找到源码。对源码进行下载,如果是thinphp则查看版本,去cve找到漏洞进行复现。如果是别的那就自己审计

相关推荐
王码码203517 分钟前
Flutter for OpenHarmony 实战之基础组件:第二十七篇 BottomSheet — 动态底部弹窗与底部栏菜单
android·flutter·harmonyos
2501_9151063217 分钟前
app 上架过程,安装包准备、证书与描述文件管理、安装测试、上传
android·ios·小程序·https·uni-app·iphone·webview
vistaup34 分钟前
OKHTTP 默认构建包含 android 4.4 的TLS 1.2 以及设备时间不对兼容
android·okhttp
常利兵40 分钟前
ButterKnife在Android 35 + Gradle 8.+环境下的适配困境与现代化迁移指南
android
撩得Android一次心动40 分钟前
Android LiveData 全面解析:使用Java构建响应式UI【源码篇】
android·java·android jetpack·livedata
熊猫钓鱼>_>1 小时前
移动端开发技术选型报告:三足鼎立时代的开发者指南(2026年2月)
android·人工智能·ios·app·鸿蒙·cpu·移动端
浩浩测试一下1 小时前
内网---> WriteOwner权限滥用
网络·汇编·windows·安全·microsoft·系统安全
ThatITs2 小时前
【无标题】
php
Java后端的Ai之路2 小时前
【Python 教程14】- 网络编程
网络·python·php
暴走十八步2 小时前
PHP+vscode开启调试debug
开发语言·vscode·php