0x00:漏洞描述 2020年1月10日,ThinkPHP团队发布一个补丁更新,修复了一处由不安全的SessionId导致的任意文件操作漏洞.该漏洞允许攻击者在目标环境启用session的条件下创建任意文件以及删除任意文件...,在特定情况下还可以getshell. 0x01:影响范围 ThinkPHP6.0.0-6.0.1 0x02:环境准备 1、/tp60/app/middleware.php 文件开启session...sid =$_POST['key']; session('zeo',$sid); return 666; } 意思是获取一个key设置写入session中 注:使用thinkphp6...最好使用高版本 的php 0x03:漏洞分析 首先这个洞,理解是sessionid为进行校验,可以导致传入任意字符,例如xxx.php.而且一般来说sessionid会作为文件名创建对应的文件保存....这是第一步我们的已经实现文件可控,如果session文件再往里面写东西要是可控的话,这样不就可以getshell了,所以我构造了上面的控制器.
在自己写的类中加入一个方法,下面我把我写的一个方法直接拿上来: /* * 文件上上传 * */ public function fileUpload(){... $upload->maxSize = 3292200; //设置上传文件类型 $fileType = array( 'jpg',...Public/Images/logo.png'); //$_POST['image'] = $uploadList[0]['savename']; //将文件信息保存到文件表中... */ //如果用的异步,则返回结果 $this->ajaxReturn($result); } } 如果在您的ThinkPHP...项目中有多处需要上传文件 ,那么在可以用这个方法为总入口,进行一个自定封装,其它地方可以传参数调用。
如果是核心版ThinkPHP仍需要下载扩展类 1.上传表单 2.上传操作 // 文件上传...; } } 3.参数设置 maxSize 文件上传的最大文件大小(以字节为单位)默认为-1 不限大小 savePath 文件保存路径(必须) saveRule 上传文件的保存规则,必须是一个无需任何参数的函数名...每个附件信息又是一个记录了下面信息的数组,包括: key 附件上传的表单名称 savepath 上传文件的保存路径 name 上传文件的原始名称 savename 上传文件的保存名称 size 上传文件的大小...type 上传文件的MIME类型 extension 上传文件的后缀类型 hash 上传文件的哈希验证字符串(作用是检验文件完整性) 4.多文件上传 <input type='file' name='
闭自动启动后可以项目的公共文件或者在控制器中通过手动调用 session_start() 或者 session('[start]') 启动 session。 ?...系统还提供了 Session 管理和操作的完善支持,全部操作可以通过一个内置的 session 函数完成,该函数可以完成 Session 的设置、获取、删除和管理操作。...Session 的使用 系统提供了Session 管理和操作的完善支持,全部操作可以通过一个内置的 session 函数完成,该函数可以完成Session的设置、获取、删除和管理操作。...session 函数位于 \ThinkPHP\Conmon\functions.php 内,源码: ?
1、入口文件访问优化 1) 建立 admin.php文件 2) 打开admin.php文件,复制 // 定义应用目录 define('APP_PATH', '..../application/'); 3) 分别在两个入口文件中绑定模块 index.php => define('BIND_MODULE', 'index'); admin.php => define...控制器 方法 4)隐藏入口文件 Apache的配置过程,可以参考下: a、httpd.conf配置文件中加载了mod_rewrite.so模块 b、AllowOverride...None 将None改为 All 在虚拟主机中把这一项改为All c、在应用入口文件同级目录添加.htaccess文件,内容如下: RewriteRule ^(.*)$ index.php.../$1 [QSA,PT,L] 其中的index.php就是入口文件, 如果隐藏后台的入口文件 则改成admin.php ?
公共函数文件,可以理解为自定义函数文件 1. 公共函数文件位置 ---- 全局公共函数文件 app/common.php 应用公共函数文件 app/应用/common.php 2....全局公共函数文件 自定义函数 app/common.php <?...php // 应用公共文件 function getRand() { return mt_rand(100, 999); } 在所有应用的控制器、模型中都可以直接使用该函数 文件位置 ---- 添加自定义函数 app/index/common.php <?...php // index 应用公共函数文件 function getMd5Rand() { return md5(mt_rand(10, 99)); } 只能在index应用下使用该函数,在其他应用下使用则抛出未定义函数的错误
ThinkPHP 是一个开源的 PHP 框架,它提供了许多方便快捷的功能,其中包括文件上传和保存功能。一、文件上传文件上传是指将本地计算机中的文件传输到服务器上。...在 ThinkPHP 中,我们可以使用 PHP 自带的 $_FILES 变量来实现文件上传。...() 函数对文件进行验证,包括文件大小和扩展名的验证,最后使用 move() 函数将文件保存到指定目录下。...二、文件保存文件保存是指将服务器上的文件保存到指定位置。在 ThinkPHP 中,我们可以使用 PHP 自带的文件操作函数来实现文件保存功能。...具体步骤如下:定义文件保存的路径,例如:$path = '.
数据库的操作是由模型来管理的,模型类的作用大多数情况是操作数据表的,如果按照系统的规范来命名模型类的话,大多数情况下是可以用模型的名字自动对应数据表的。...Model)(看得很懵逼对吧,我也是,上面这段话是百度的,下面实例化要好好看了) TP提供了快捷实例化模型的API,上面的直接实例化的时候我们需要传入完整的类名,系统提供了一个快捷方法D用于数据模型的实例化操作...('id'=>$map['id']))->find(); //array('id'=>$map['id'])等同于$map dump($data); find方法查询数据的时候可以配合相关的连贯操作方法...array('username'=>'benny','password'=>'123'); $data = $user->where(‘id =1 ’)->setField($data); 3、数据删除 ThinkPHP...,不会执行删除操作 (原文写于2017.8.16)
TP6的文件上传相较于之前的版本有些变化,用法变了,也相对的更灵活了。下面是文件上传的使用示例。 还算说得挺清楚的了,如果还有什么疑问,可以在评论区留言。 前端代码 thinkphp6_0/1037508 --> thinkphp6_0/1037629#_444 ]])->check(['file' => $file]); // 保存路径,实际保存路径为“磁盘路径” + “avatar...可以使用哈希算法,如:md5/sha1等,还可以传入匿名函数,详细可以看后面 $rule = 'md5'; // 将文件保存public磁盘,文件名为$rule指定的规则。...文件MINE:image/jpeg 'mime' => $file->getMime(), ]; halt($info); 文件名规则 文件名规则支持传入匿名函数、哈希算法和函数名。
概述 2020 年 1 月 10 日,ThinkPHP 团队发布一个补丁更新,修复了一处由不安全的 SessionId 导致的任意文件操作漏洞。...该漏洞允许攻击者在目标环境启用 session 的条件下创建任意文件以及删除任意文件,在特定情况下可 getshell。 具体受影响版本为 ThinkPHP 6.0.0 - 6.0.1。...composer create-project --prefer-dist topthink/think=6.0.0 thinkphp6.0.0 在 app/controller/Index.php 中加一行代码...session 本身的处理了,比如 $_SESSION 数组被序列化后写入文件保存以及清除。...参考 https://mp.weixin.qq.com/s/UPu6cE20l24T6fkYOlSUJw https://mochazz.github.io/2020/01/14/ThinkPHP6.0%
一、前言在 Web 应用程序中,文件下载和查看是非常常见的功能。在 ThinkPHP 框架中,我们可以很方便地实现这些功能,本文将介绍如何在 ThinkPHP 中实现文件下载和查看功能。...二、文件下载文件下载是指将服务器上的文件发送到客户端,供客户端用户下载和保存。...在 ThinkPHP 中,我们可以使用以下代码来实现文件下载功能:public function download(){ // 获取要下载的文件路径 $file_path = '....三、文件查看文件查看是指在浏览器中查看服务器上的文件,常见的文件类型包括图片、PDF 文件、文本文件等。...在 ThinkPHP 中,我们可以使用以下代码来实现文件查看功能:public function view(){ // 获取要查看的文件路径 $file_path = '.
本文实例讲述了thinkPHP框架整合tcpdf插件操作。...); $pdf->Output('/var/www/example_038.pdf', 'I');//浏览器预览 //$pdf->Output('example_038.pdf', 'F');//存储文件...//$pdf->Output('example_038.pdf', 'D');//下载文件 这样就可以了。...希望本文所述对大家基于ThinkPHP框架的PHP程序设计有所帮助。
ThinkPHP模型 模型定义 在app目录下创建Model目录,即可创建模型文件 定义一个和数据库表相匹配的模型 use think\Model; class User extends Model...(浪费资源),thinkphp支持自定义字段信息。...---- 最佳操作实践 新增操作: 新增数据的最佳实践原则:使用create静态方法新增数据,使用saveAll批量新增数。...saveAll方法新增数据默认会自动识别数据是需要新增还是更新操作,当数据中存在主键的时候认为是更新操作。...参照官方技术文档 ---- 模型自动时间戳 系统支持自动写入创建和更新的时间戳字段(默认会关闭),具体配置方法: 全局开启:在database.php文件中修改auto_timestamp为truely
摘要 本文介绍了如何在ThinkPHP框架中修改上传文件大小的方法。ThinkPHP是一款优秀的PHP开发框架,提供了丰富的扩展功能。...在开发过程中,文件上传是一个常见的需求,但默认情况下,ThinkPHP上传文件大小是受到限制的。...ThinkPHP是一款优秀的PHP开发框架,其提供了丰富的扩展功能,方便开发者快速完成各种需求。在开发过程中,文件上传是一个常见的需求。但是默认情况下,ThinkPHP上传文件大小是受到限制的。...那么,如何修改上传文件大小呢? 一、PHP.ini配置修改 首先需要注意的是,在 PHP.ini 文件中有上传文件大小的限制。因此,我们可以通过修改 PHP.ini 文件来实现上传文件大小的修改。...二、修改应用配置文件 修改 PHP.ini 文件是全局的,如果你只想修改某个应用中的上传文件大小,就需要修改 ThinkPHP 应用配置文件。
/uploads'); if ($info) { // 文件上传成功,返回文件路径 $path = './uploads/' ....; file_put_contents($path, $content); return '文件上传成功!'...,我们首先定义了一个 Upload 控制器,其中包括一个 index() 函数用于展示上传页面,和一个 upload() 函数用于处理文件上传和保存操作。...在 upload() 函数中,我们使用 request() 函数获取文件对象 $file,然后使用 validate() 函数对文件进行验证,包括文件大小和扩展名的验证,最后使用 move() 函数将文件保存到指定目录下...如果文件上传成功,我们将文件保存到指定路径下,并返回“文件上传成功!”的提示信息;如果文件上传失败,则返回错误信息。
是 将内容 转成 二进制数据 的规则 , 通过 该规则还可以将 二进制数据 转为 文件内容 ; 二、打开文件 在 Python 中 , 操作文件 的流程如下 : 打开文件 读写文件 关闭文件 1、open..., 可以包含目录名称和文件名称 ; mode 参数 : 文件访问模式 , 有如下访问模式 : 只读 : r 模式 , 以只读方式打开 , 文件指针在文件头位置 , 默认模式 ; 只写 : w..., 新内容会被写入到文件末尾 ; 如果文件不存在 , 则创建新文件写入 ; encoding 参数 : 编码格式 , 一般都设置为 UTF-8 ; 2、代码示例 - 使用 open 函数打开文件 代码示例...: """ 文件操作 代码示例 """ file = open("file.txt", "r", encoding="UTF-8") print(type(file)) # <class '_io.TextIOWrapper...参数并不是第三个参数 , 不能使用位置参数 , 必须使用关键字参数指定 ; 获取的 file 文件类型是 _io.TextIOWrapper , 借助该对象可以完成对文件的操作 ; 上述代码执行结果 :
文件上传封装类 ---- <?php // 本文件放在TP6.0....@param string $field 字段名 * @param string $dir 文件存放目录名,默认和字段名相同 * @return array 文件上传结果数组 */ public static...: Filesystem::getDefaultDriver(); // 文件存放目录名称 $dirname = $dir ?..., 'file write error' => '文件写入失败!', 'upload temp dir not found' => '找不到临时文件夹!'..., 'no file to uploaded' => '没有文件被上传!', 'only the portion of file is uploaded' => '文件只有部分被上传!'
如果是post请求还是设置了正确的编码,没有文件上传时 request()->file(‘文件字段域’) 会抛出异常,捕获该异常即可。...ThinkPHP6.0 判断是否有文件上传 // 捕获异常 try { // 此时可能会报错 // 比如:上传的文件过大,超出了配置文件中限制的大小 $file = request()->file('img...'); // 如果表单没有设置文件上传需要的编码 $file始终是null if (is_null($file)) { // 请检查请求类型和表单编码 // 不是post请求或没有指定enctype="...multipart/form-data"会进入这里 throw new \think\Exception('没有文件上传'); } } catch (\think\Exception $e) { //
1、thinkphp在查询数据库的时候: $infoLists=M('user')->field('id,amount')->where('openid='....->order($sortSql) ->where($where) ->select(); 4、对数据库中一条数据的某个字段进行数学运算操作...$first_user_info['uid'])->setInc('money',$jl_price); setDec:值减; setInc:值增; 5、thinkphp后端查询数据库出来会把字段大写全部转为小写的解决方案...: 在配置文件中新增一个配置: 'DB_PARAMS' => array(\PDO::ATTR_CASE => \PDO::CASE_NATURAL),
环境: Win10 Phpstudy 2018 PHP-7.0.12 NTS+Apache Fastadmin V1.2.0.20210125_full ThinkPHP 5.0.24 Fastadmin...默认配置 (不开启app_debug和app_trace) 0x02 正文 我们知道在Thinkphp5没有开启app_debug的时候,能够写入日志文件的信息很少而且只有触发报错的时候才会写入部分日志信息...头会换成大写,PHP马写进去之后解析可能会出问题,所以建议还是用host和url的两个头 实战场景:Fastadmin普通用户可以登陆,有模版渲染漏洞,没有开app_debug,无法修改头像,用模版渲染日志文件...getshell 0x03 总结 遇到类似的场景时,基于tp5的文件包含、模板渲染写入PHP代码时可尝试用上述的请求头。