第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找到漏洞进行复现。如果是别的那就自己审计

相关推荐
LegendNoTitle14 分钟前
计算机三级等级考试 网络技术 选择题考点详细梳理
服务器·前端·经验分享·笔记·php
kang0x016 分钟前
silent_peeper Writeup by AI
安全
瀚高PG实验室2 小时前
易智瑞GeoScene Pro连接瀚高安全版数据库 458
数据库·安全·瀚高数据库
钛态2 小时前
Flutter 三方库 http_mock_adapter — 赋能鸿蒙应用开发的高效率网络接口 Mock 与自动化测试注入引擎(适配鸿蒙 HarmonyOS Next ohos)
android·网络协议·flutter·http·华为·中间件·harmonyos
王码码20352 小时前
Flutter for OpenHarmony:Flutter 三方库 algoliasearch 毫秒级云端搜索体验(云原生搜索引擎)
android·前端·git·flutter·搜索引擎·云原生·harmonyos
左手厨刀右手茼蒿2 小时前
Flutter for OpenHarmony: Flutter 三方库 shamsi_date 助力鸿蒙应用精准适配波斯历法(中东出海必备)
android·flutter·ui·华为·自动化·harmonyos
代码飞天3 小时前
wireshark的高级使用
android·java·wireshark
2501_915918414 小时前
苹果App Store上架审核卡住原因分析与解决方案指南
android·ios·小程序·https·uni-app·iphone·webview
skiy4 小时前
MySQL Workbench菜单汉化为中文
android·数据库·mysql
小小小点4 小时前
Android四大常用布局详解与实战
android