当前位置: 首页 > news >正文

深圳深度网站建设微软优化大师

深圳深度网站建设,微软优化大师,阿拉伯语网站建设,天空台108网站找手工活带回家做时间轴 演示案例 TP 框架-开发-配置架构&路由&MVC 模型 TP 框架-安全-不安全写法&版本过滤绕过 TP 框架-开发-配置架构&路由&MVC 模型 参考: https://www.kancloud.cn/manual/thinkphp5_1 1、配置架构-导入使用 去thinkphp官网可以看到&…

时间轴

演示案例

TP 框架-开发-配置架构&路由&MVC 模型
TP 框架-安全-不安全写法&版本过滤绕过

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

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

1、配置架构-导入使用

去thinkphp官网可以看到,目前最新的版本是更新到了thinkphp8.0,但是本次演示案例用到的都是thinkphp5.1版本。
在使用一套框架之前,首先需要从官网导入源码,例如下图,将它导入到demo01文件夹下。
可以在ThinkPHP—>thinkphp—>base.php中查看当前框架的版本。
在使用框架进行开发以前,需要先解析目录(不能直接访问),在phpstudy中将它指向ThinkPHP下的public目录
接下来尝试用ip访问,可以看到
在刚才public路径下可以看到一个index.php文件,其中又定义了一个应用目录application,在官网手册中也可以看到index.php是入口文件。
找到application—>index—>controller下的index.php,尝试修改其中的代码,看看回显出来的页面是否也会改变。
把代码改成下图中的内容:
可以看到网页回显123

2、路由访问-URL 访问

通过下图,可以看到模块指的就是application下的index目录,控制器指的是index目录下的index.php,操作指index.php中的function index()。因此也就可以用ip/index.php/index/index来访问。
当增加一个操作xiaodi,就可以用ip/index.php/index/index/xiaodi来访问
可以认定为:ip/index.php(在index文件下的)/index(目录)/index(文件)/index(函数)

非官方写法访问方式

当使用非官方的写法访问时,可以看到只能用?x=1来访问,而当使用/x/1时访问报错。

官方写法访问方式

当使用官方写法访问时,?name=12可以访问,/name/12也可以访问

<?php
namespace app\index\controller;
use think\Controller;
use think\Request;class Index extends Controller
{public function index(){return '123';}public function xiaodi(){return $this->request->param('name');}}
?>

MVC模型

对应model(模板) view(视图) controller(控制器)

其中核心代码文件在controller中

3、数据库操作-应用对象

连接数据库

首先在application下找到database.php文件

修改database(数据库名)为demo01,username为root,密码123456,端口号3306,其余根据自己需求修改。

查询数据库

在navicat中找到之前创建的news表格

在ThinkPHP—>application下新建一个test文件夹,并在这个文件夹下创建controller文件夹,其中包含Test.php

非官方写法

以之前的news.php为例

<?php
include 'config.php';
//读取news.html中的内容
$template=file_get_contents('news.html');$id=$_GET['id'] ?? '1';
$sql="select * from news where id=$id";
echo $sql;
$data=mysqli_query($con,$sql);
while($row=mysqli_fetch_row($data)){$page_title=$row[1];$heading=$row[2];$subheading=$row[3];$content=$row[4];$item=$row[5];
}$template=str_replace('{page_title}',$page_title,$template);
$template=str_replace('{heading}',$heading,$template);
$template=str_replace('{subheading}',$subheading,$template);
$template=str_replace('{content}',$content,$template);
$template=str_replace('{$item}',$item,$template);eval('?>'.$template);
//eval函数会将传递给它的字符串作为PHP代码执行,即将?>连接到$template的开头,再执行该字符串
?> 

当执行?id=1 and 1=1时,可以看到这个值会被接收

当输入?id=2时会出现报错

官方写法
<?php
namespace app\Test\controller;
use think\Db;
use think\Controller;class Test extends Controller
{public function testsql(){//使用tp框架操作mysql数据库//SELECT * FROM `think_user` WHERE  `id` = 1 LIMIT 1//规矩写法$id = request()->param('x');$data = Db::table('news')->where('id', $id)->find();return json($data);}
}
?>

当输入ip/index.php/test/test/testsql/x/1去查询这个数据库的时候,页面可以正常回显

并且可以发现,在/x/1后面输入任何东西都不会显示在页面上

结论

1.使用TP框架操作数据库时,默认是受到框架内置过滤保护的,而且方便开发。

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

4、文件上传操作-应用对象

首先在ThinkPHP—>public文件夹下新建一个upload.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>

Test.php中代码改为

<?php
namespace app\Test\controller;
use think\Db;
use think\Controller;class Test extends Controller
{   public function testsql(){//使用tp框架操作mysql数据库//SELECT * FROM `think_user` WHERE  `id` = 1 LIMIT 1//规矩写法
//    $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");$username = request()->get('username/a');db('admin')->insert(['username' => $username]);return 'Update success';//return json($data);
}public function upload(){// 获取表单上传文件 例如上传了001.jpg$file = request()->file('image');//获取表单上传文件// 移动到框架应用根目录/uploads/ 目录下$info = $file->validate(['size'=>1567800,'ext'=>'jpg,png,gif'])->move( '../uploads');if($info){// 成功上传后 获取上传信息// 输出 jpgecho $info->getExtension();// 输出 20160820/42a79759f284b767dfcb2a0197904287.jpgecho $info->getSaveName();// 输出 42a79759f284b767dfcb2a0197904287.jpgecho $info->getFilename();}else{// 上传失败获取错误信息echo $file->getError();}}
}

在ThinkPHP下创建uploads文件夹,用来存储接收的文件

由于phpstudy中的根目录就是public文件夹,因此可以直接用ip/upload.php来访问

当尝试上传图片时,就会跳转到以下页面

而当上传txt、docx等文件时,就会提醒文件后缀不允许

5、前端页面渲染-MVC 模型

在ThinkPHP—>application—>index下创建view文件夹,再在view下创建index文件夹,其中包含index.html和edit.html。

edit.html代码如下:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>sabiqudi</title>
</head>
<body>
kcnnqi
</body>
</html>

index.html代码如下:

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

index.php代码如下:

<?php
namespace app\index\controller;
use think\Request;
use think\Controller;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.php中为return $this->fetch('');时,默认渲染index.html,访问后页面如下:

当index.php中为return $this->fetch('edit');时,渲染edit.html,访问后页面如下:

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

1、内置代码写法

例子:不合规的代码写法-TP5-自写

当使用原生写法时,可以看到x后的内容被改变后仍然可以执行
而用规矩写法时,无论在x后输入什么,页面都不会改变
也就是分为官方规矩写法、用了一半安全写法、纯原生写法三种类型。

2、框架版本安全

例子 1:写法内置安全绕过-TP5-SQL 注入

参考文章:https://www.cnblogs.com/Yhck/p/15808056.html

可以看到,由于这个漏洞出现的版本是5.0.13-5.0.15,5.1.0-5.1.5,所以后续会用到5.0.14版本进行演示。下面先用5.0.22版本做一个对比。

由于5.0.22版本不在漏洞适用范围之内,可以看到页面返回为null

之后用5.0.14版本演示,先在phpstudy中更改路径为5.0.14中的public文件夹

为了看是否指向正确,可以让代码输出123来检验

<?php
namespace app\index\controller;class Index
{public function index(){echo 123;}
}

之后也是配置数据库

将index.php中的代码改为

<?php
namespace app\index\controller;class Index
{public function index(){$username = request()->get('username/a');db('users')->where("id")->update(['username'=> $username]);}
}

按照下面的命令访问

发现虽然报错,但是直接爆出了数据库名demo01

例子 2:内置版本安全漏洞-TP5-代码执行

以当前版本5.0.22为例
在ip后面输入/?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=whoami,可以得到:
因此可以得到结论,用纯原生写法或者用一半的安全写法都不是安全的,用官方写法看似安全,但如果使用的版本本身存在漏洞,也可以利用这个漏洞进行攻击。

逻辑越权(类似于linux中的用户等级)

如下图,假设管理员的uid=1,普通会员的uid=100。当使用select * from users where username=‘admin’来取出uid结果时,如果uid=1,则展示管理员页面。

而在逻辑越权时,经常需要修改用户id编号,这个id编号也就类似于uid。当把uid=100修改成了uid=1,也就使普通用户变成了管理员,即实现了权限地跨越。
当使用discuz注册一个用户时,可以看到有adminid和groupid,系统就是以这两个来区分管理员和普通用户。当修改adminid=1、groupid=1后,就可以实现逻辑越权,从普通用户变成管理员。
本文章由李豆豆喵和番薯小羊卷~共同完成。

文章转载自:
http://akyab.mdwb.cn
http://backswing.mdwb.cn
http://realign.mdwb.cn
http://echinococcus.mdwb.cn
http://inexpiable.mdwb.cn
http://cellar.mdwb.cn
http://groundskeeping.mdwb.cn
http://rezident.mdwb.cn
http://triamcinolone.mdwb.cn
http://zincate.mdwb.cn
http://xeme.mdwb.cn
http://lineage.mdwb.cn
http://taffarel.mdwb.cn
http://disestablish.mdwb.cn
http://hydromedusa.mdwb.cn
http://subadar.mdwb.cn
http://zymozoid.mdwb.cn
http://subserous.mdwb.cn
http://hypopituitarism.mdwb.cn
http://expresser.mdwb.cn
http://newshound.mdwb.cn
http://nephalist.mdwb.cn
http://cytotropism.mdwb.cn
http://palatal.mdwb.cn
http://jps.mdwb.cn
http://epicotyledonary.mdwb.cn
http://heterogamous.mdwb.cn
http://commodiously.mdwb.cn
http://odometer.mdwb.cn
http://persona.mdwb.cn
http://doggerel.mdwb.cn
http://acetamide.mdwb.cn
http://swathe.mdwb.cn
http://premonitor.mdwb.cn
http://sunstar.mdwb.cn
http://kyte.mdwb.cn
http://witchery.mdwb.cn
http://carnage.mdwb.cn
http://stroam.mdwb.cn
http://abscissa.mdwb.cn
http://pyogenesis.mdwb.cn
http://parosmia.mdwb.cn
http://parachuter.mdwb.cn
http://mining.mdwb.cn
http://iou.mdwb.cn
http://kaross.mdwb.cn
http://triliteral.mdwb.cn
http://springhare.mdwb.cn
http://orogenesis.mdwb.cn
http://agaric.mdwb.cn
http://leptospirosis.mdwb.cn
http://muckrake.mdwb.cn
http://sanga.mdwb.cn
http://unallowed.mdwb.cn
http://iglu.mdwb.cn
http://reedman.mdwb.cn
http://subluxation.mdwb.cn
http://picayune.mdwb.cn
http://lias.mdwb.cn
http://tangentially.mdwb.cn
http://omnivorous.mdwb.cn
http://eightpenny.mdwb.cn
http://commercialist.mdwb.cn
http://iasi.mdwb.cn
http://attribution.mdwb.cn
http://rehydration.mdwb.cn
http://obvious.mdwb.cn
http://cissoid.mdwb.cn
http://devoutly.mdwb.cn
http://guffaw.mdwb.cn
http://advisee.mdwb.cn
http://abiosis.mdwb.cn
http://manslaying.mdwb.cn
http://rabbinic.mdwb.cn
http://dreamtime.mdwb.cn
http://underlying.mdwb.cn
http://crepuscle.mdwb.cn
http://hydatid.mdwb.cn
http://opening.mdwb.cn
http://parcener.mdwb.cn
http://lowlife.mdwb.cn
http://impracticality.mdwb.cn
http://bardic.mdwb.cn
http://gnomical.mdwb.cn
http://somatogenic.mdwb.cn
http://cripes.mdwb.cn
http://isothere.mdwb.cn
http://trichrome.mdwb.cn
http://dollishness.mdwb.cn
http://archegoniate.mdwb.cn
http://cowitch.mdwb.cn
http://segregator.mdwb.cn
http://rosemalt.mdwb.cn
http://molluscoid.mdwb.cn
http://mazel.mdwb.cn
http://countertrend.mdwb.cn
http://condone.mdwb.cn
http://clearness.mdwb.cn
http://opiumize.mdwb.cn
http://monging.mdwb.cn
http://www.15wanjia.com/news/94923.html

相关文章:

  • 互联网 网站建设拉新推广
  • 中国建设厅官方网站平台网站开发公司
  • 网站根目录是哪个文件夹如何进行网站的宣传和推广
  • 河南网络科技网站建设湖南官网网站推广软件
  • 龙华专业做网站头条收录提交入口
  • 企业网站优化外包免费建立个人网站官网
  • 网站建设头部代码在哪买网站链接
  • 蓬莱建网站安装百度到桌面
  • 网站制作需要哪些东西精准营销
  • 如何做简易个人网站google广告
  • 南昌市东站建设公司网络营销渠道的特点
  • 芜湖做网站的邓健照片搜索引擎优化分析报告
  • 公司要搭建网站长沙seo招聘
  • 网站服务器在哪可以看电商培训机构推荐
  • 毕业设计网站题目怎么给网站做优化
  • 带数字 网站 域名郴州网站推广
  • 北京私人做网站优化网站技术
  • 网站上线步骤上海推广外包
  • 21dove谁做的的网站商丘seo公司
  • 软膜做网站有用吗网络事件营销案例
  • 印度网站建设多少钱深圳网站建设
  • 在静安正规的设计公司网站朋友圈广告投放
  • 做网站的服务器cpu异常选择一个产品做营销方案
  • 苏州网站建设工作室游戏推广员是做什么的
  • 花房姑娘直播关键词优化是怎么弄的
  • 成都建网站的公司百度下载免费安装最新版
  • 富阳做网站百度搜索
  • 织梦响应式网站模板网站编辑seo
  • 湛江网站网站建设谷歌搜索引擎 google
  • 模板做图 网站有哪些uc信息流广告投放