php文件上传实验总结,PHP文件上传一些小收获
又码了一个周末的代码,这次在做一些关于文件上传的东西。(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文件上传一些小收获相关推荐
- linux文件权限管理实验心得,Linux+文件权限管理实验
主机安全-- Linux文件权限管理实验 对于文件 /etc/passwd,该文件的属组(root)可读.不可写,不可执行 对于文件 /etc/shadow,该文件的属组(root)不可读.不可写,不 ...
- python上机实验报告读取文件_Python程序设计实验八:文件
安徽工程大学 Python程序设计实验报告 班级:物流192 姓名:李心悦 学号:3190505218成绩: 日期:2020.6.3 指导教师:修宇 [实验名称]实验八 文件 [实验目的] 掌握读写文 ...
- mysql 8.0 导入文件_MySQL8.0实验-从本地文件导入数据
先使用以下代码创建一个表: 1 mysql> CREATE TABLE pet (name VARCHAR(20), owner VARCHAR(20),2 species VARCHAR(20 ...
- 蓝牙透传实验_蓝牙模块透传模式使用说明
1 昇润科技CC2541透传模块默认配置为无模式(既不是主机也不是从机,可通过命令设置主或从模式),数据加密,连接间隔20ms,广播间隔100ms.首先将蓝牙透传模块供电后通过串口连接到计算机上,并将 ...
- 文件包含中过滤了php,文件包含漏洞---php协议
一.原理 1.概念:在php代码中,总会有一些代码我们会经常用到,这时引入了文件包含函数,可以通过文件包含函数把这些代码文件包含进来,直接使用文件中的代码,这样提高了我们的工作效率. 2.文件包含函数 ...
- 实验问题解决:HDFS上传文件
实验问题解决:HDFS上传文件 使用教材:大数据基础编程.实验和案例教程(第2版) 问题解决:第 4 章 "4.3.4 编译运行程序" 中确保 /user/hadoop 目录下已经 ...
- widow下svn上传项目时的文件可执行权限问题
还是项目上发现的问题,要上传Android的源码项目.这里客户端是windows的机器, 测试后发现俩个问题. 1. 文件后缀是.so的文件默认上传不了. 2. 文件后缀是.sh的文件,上传后, ...
- 服务器监控文件变化,如何使用nodejs监控文件变化并使用sftp上传到服务器
如何使用nodejs监控文件变化并使用sftp上传到服务器 发布时间:2021-07-01 12:06:56 来源:亿速云 阅读:99 作者:小新 这篇文章主要为大家展示了"如何使用node ...
- node 自动上传文件到服务器,利用nodejs监控文件变化并使用sftp上传到服务器
最近在用react+express做一个自己的工具型网站(其实就是夺宝岛抢拍器) 然后因为经常要改动,而且又要放到服务器上进行测试.总是要webpack,然后手动把文件上传上去,不胜其烦,索性搜索了下 ...
最新文章
- mysql配置及其使用
- 简单题汇总,小知识点
- solr7.4 安装与使用
- java 一些容易忽视的小点-控制语句
- android 开发热更新技术Andfix 和 Tinker
- java实验三多态性_Java实验3 类的多态性和接口
- 【目标定位】基于matlab粒子滤波目标定位仿真【含Matlab源码 129期】
- excel下载模版(数据字典)
- EPUB和PDF的区别,有什么好用的安卓epub阅读器
- Win7环境下如何开启802.1X 无线网络认证
- 嘘——2021还没对象?你的虚拟女友已上线。
- 云服务器内存占用多少,腾讯云云服务器CPU或内存占用过高怎么办?
- hive从入门到放弃(一)——初识hive
- matlab interp1 spline,中国大学MOOC: MATLAB/Octave函数interp1中有一个描述插值方法的参数,其中spline表示...
- Photoshop使用教程 如何在线抠图
- Python3 PDF转图片
- CSS控制print打印样式
- 【前端小实战】遮罩层动画效果
- 练习- Java顺序结构综合练习三之金融投资收益计算
- 计算机系男生生的都是女儿吗,IT男只能生女孩,生男孩几率很小吗?