又码了一个周末的代码,这次在做一些关于文件上传的东西。(PHP UPLOAD)小有收获项目是一个BT种子列表,用户有权限上传自己的种子,然后配合BT TRACK服务器把种子的信息写出来。

开始觉得这玩意很简单,结果嘛惨不忍睹。用CodeIgniter的上传类来上传文件,一开始进展蛮顺利的,但发觉走到上传文件类型的时候就走不下去了。我明明添加了.torrent类型为可上传类型,结果无论我怎么传也传不上去,还提示我上传文件类型不对。汗森了,这可是货真价实的种子文件啊,难道CI只认可岛国的种子吗?

打开CI的上传类看代码,原来CI的UPLOAD是通过判断文件的来实现文件识别的。难怪,种子的MIME类型在一般浏览器上返回的都是二进制数据类型,看来只有自己动手改造一下了。

为了尽快完成项目,我直接从控制器(Controller)开始写代码。用$_FILE['file']['name']获取上传文件的文件名,然后用explode函数来获取后缀名,最后再调用CI的UPLOAD来上传文件。代码如下:

PHP代码

 代码如下 复制代码
$config['upload_path'] = './uploads/';

$config['allowed_types'] = '*';

$config['max_size'] = '100';

$this->load->library('upload',$config);

$this->load->helper('security');

$this->load->helper('date');

$this->load->helper('url');

$this->load->model('bt_model','',TRUE);

$data['source_url'] = base_url().'source';

$data['base_url'] = base_url();

$file = $_FILES['upload_file']['name'];

$file_1 = explode('.',$file);

$file_2 = $file_1[count($file_1)-1];

if($file_2 <> 'torrent'){

echo '';

echo '';

return;

}

$data['type'] = xss_clean($this->input->post('type'));

$data['name'] = xss_clean($this->input->post('name'));

$data['space'] = xss_clean($this->input->post('space'));

$data['username'] = xss_clean($this->input->post('username'));

$data['time'] = mdate('%Y-%m-%d %G:%i',gmt_to_local(time(),'UP8'));

if($data['type'] == '' || $data['name'] == '' || $data['space'] == '' || $data['username'] == ''){

echo '';

echo '';

return;

}

$this->upload->do_upload('upload_file');

echo $this->upload->display_errors();

$file = $this->upload->data();

$data['url'] = $data['base_url'].'uploads/'.$file['file_name'];

$this->bt_model->insert($data);

echo '';

echo '';

原理大致是这样的,获取上传文件的文件名,然后通过explode()函数来分割文件名以获取后缀,得到后缀之后与允许上传类型做比较,最后上传。

讲到上传,我又想到了原来那个特别流行的MIME上传漏洞。很简单,当网站判断上传文件类型时只判断MIME类型那么就会造成上传漏洞。因为上传时服务器得到的MIME类型是从客户端发过来的,也就是说MIME类型的值是可以被用户控制的,攻击者克构造虚假的MIME类型来上传webshell。

所以判断文件类型的时候还是检测文件后缀名吧,最好只给上传目录一个可读权限,关闭执行权限,这样比较靠谱。

php文件上传实验总结,PHP文件上传一些小收获相关推荐

  1. linux文件权限管理实验心得,Linux+文件权限管理实验

    主机安全-- Linux文件权限管理实验 对于文件 /etc/passwd,该文件的属组(root)可读.不可写,不可执行 对于文件 /etc/shadow,该文件的属组(root)不可读.不可写,不 ...

  2. python上机实验报告读取文件_Python程序设计实验八:文件

    安徽工程大学 Python程序设计实验报告 班级:物流192 姓名:李心悦 学号:3190505218成绩: 日期:2020.6.3 指导教师:修宇 [实验名称]实验八 文件 [实验目的] 掌握读写文 ...

  3. mysql 8.0 导入文件_MySQL8.0实验-从本地文件导入数据

    先使用以下代码创建一个表: 1 mysql> CREATE TABLE pet (name VARCHAR(20), owner VARCHAR(20),2 species VARCHAR(20 ...

  4. 蓝牙透传实验_蓝牙模块透传模式使用说明

    1 昇润科技CC2541透传模块默认配置为无模式(既不是主机也不是从机,可通过命令设置主或从模式),数据加密,连接间隔20ms,广播间隔100ms.首先将蓝牙透传模块供电后通过串口连接到计算机上,并将 ...

  5. 文件包含中过滤了php,文件包含漏洞---php协议

    一.原理 1.概念:在php代码中,总会有一些代码我们会经常用到,这时引入了文件包含函数,可以通过文件包含函数把这些代码文件包含进来,直接使用文件中的代码,这样提高了我们的工作效率. 2.文件包含函数 ...

  6. 实验问题解决:HDFS上传文件

    实验问题解决:HDFS上传文件 使用教材:大数据基础编程.实验和案例教程(第2版) 问题解决:第 4 章 "4.3.4 编译运行程序" 中确保 /user/hadoop 目录下已经 ...

  7. widow下svn上传项目时的文件可执行权限问题

    还是项目上发现的问题,要上传Android的源码项目.这里客户端是windows的机器, 测试后发现俩个问题. 1. 文件后缀是.so的文件默认上传不了.    2. 文件后缀是.sh的文件,上传后, ...

  8. 服务器监控文件变化,如何使用nodejs监控文件变化并使用sftp上传到服务器

    如何使用nodejs监控文件变化并使用sftp上传到服务器 发布时间:2021-07-01 12:06:56 来源:亿速云 阅读:99 作者:小新 这篇文章主要为大家展示了"如何使用node ...

  9. node 自动上传文件到服务器,利用nodejs监控文件变化并使用sftp上传到服务器

    最近在用react+express做一个自己的工具型网站(其实就是夺宝岛抢拍器) 然后因为经常要改动,而且又要放到服务器上进行测试.总是要webpack,然后手动把文件上传上去,不胜其烦,索性搜索了下 ...

最新文章

  1. mysql配置及其使用
  2. 简单题汇总,小知识点
  3. solr7.4 安装与使用
  4. java 一些容易忽视的小点-控制语句
  5. android 开发热更新技术Andfix 和 Tinker
  6. java实验三多态性_Java实验3 类的多态性和接口
  7. 【目标定位】基于matlab粒子滤波目标定位仿真【含Matlab源码 129期】
  8. excel下载模版(数据字典)
  9. EPUB和PDF的区别,有什么好用的安卓epub阅读器
  10. Win7环境下如何开启802.1X 无线网络认证
  11. 嘘——2021还没对象?你的虚拟女友已上线。
  12. 云服务器内存占用多少,腾讯云云服务器CPU或内存占用过高怎么办?
  13. hive从入门到放弃(一)——初识hive
  14. matlab interp1 spline,中国大学MOOC: MATLAB/Octave函数interp1中有一个描述插值方法的参数,其中spline表示...
  15. Photoshop使用教程 如何在线抠图
  16. Python3 PDF转图片
  17. CSS控制print打印样式
  18. 【前端小实战】遮罩层动画效果
  19. 练习- Java顺序结构综合练习三之金融投资收益计算
  20. 计算机系男生生的都是女儿吗,IT男只能生女孩,生男孩几率很小吗?

热门文章

  1. 千千静听声控精灵(语音识别)
  2. 【Android】如何提高自己软件的稳定性
  3. Moment.js (JavaScript 日期处理类库)
  4. 华氏温度转换摄氏温度程序
  5. 《软件工程-理论、方法与实践》读书笔记二
  6. 阿里巴巴的员工工资待遇:工程师25万,专家80万,研究员百万
  7. 开源水下机器人之推进器使用教程
  8. SSL 1579——泽泽在巴西
  9. jzoj P1135 【2011.12.10普及模拟】泽泽在中国
  10. MIT-6.s081-OS mid-term quiz 2019