PHP之文件上传漏洞
2012-02-17 20:39
579 查看
因为最近在制作班级网站,考虑到文件上传带来的安全问题,特此研究一下。
下面看一个简单的上传代码。
注意在php.ini中(应环境各异),在xampp集成搭建环境中uplod_max_filesize默认上传最大大小为128mb。
请注意PHP使用$_FILES数组上传文件,假设上传jpg图片,大小18KB,看如下代码
如果上传文件按钮的name属性值为file
<input type="file" name="file" />
那么使用$_FILES['file']['name']来获得客户端上传文件名称,不包含路径。使用$_FILES['file']['tmp_name']来获得服务端保存上传文件的临时文件路径
存放上传文件的文件夹
PHP不会直接将上传文件放到网站根目录中,而是保存为一个临时文件,名称就是$_FILES['file']['tmp_name']的值,开发者必须把这个临时文件复制到存放的网站文件夹中。
$_FILES['file']['tmp_name']的值是由PHP设置的,与文件原始名称不一样,开发者必须使用$_FILES['file']['name']来取得上传文件的原始名称。
如图产生错误信息
文件上传漏洞
如果提供给网站访问者上传图片的功能,那必须小心访问者上传的实际可能不是图片,而是可以指定的PHP程序。如果存放图片的目录是一个开放的文件夹,则入侵者就可以远程执行上传的PHP文件来进行攻击。
下面是一个简单的文件上传例子:
<?php
// 设置上传文件的目录
$uploaddir = "D:/www/images/";
// 检查file是否存在
if (isset($_FILES['file']))
{
// 要放在网站目录中的完整路径,包含文件名
$uploadfile = $uploaddir . $_FILES['file']['name'];
// 将服务器存放的路径,移动到真实文件名
move_uploaded_file($_FILES['file']['tmp_name'], $uploadfile);
}
?>
……
<form method="post" enctype="multipart/form-data" name="form">
<input type="file" name="file" /><br />
<input type="submit" value="上传文件" />
<input type="hidden" name="MAX_FILE_SIZE" value="1024" />
</form>
这个例子没有检验文件后缀,可以上传任意文件,很明显的上传漏洞
下面看一个简单的上传代码。
<form action="index.php" method="post" enctype="multipart/form-data" name="form"> <input type="file" name="file" /><br /> <input type="submit" value="上传文件" /> <input type="hidden" name="MAX_FILE_SIZE" value="1024" /> </form>
注意在php.ini中(应环境各异),在xampp集成搭建环境中uplod_max_filesize默认上传最大大小为128mb。
请注意PHP使用$_FILES数组上传文件,假设上传jpg图片,大小18KB,看如下代码
$FILES Array { [file] => Array { [name] => test.jpg //文件名称 [type] => image/jpeg //MIME类型 [tmp_name] => /tmp/php5D.tmp //临时文件 [error] => 0 //错误信息 [size] => 18 //文件大小,单位字节 } }
如果上传文件按钮的name属性值为file
<input type="file" name="file" />
那么使用$_FILES['file']['name']来获得客户端上传文件名称,不包含路径。使用$_FILES['file']['tmp_name']来获得服务端保存上传文件的临时文件路径
存放上传文件的文件夹
PHP不会直接将上传文件放到网站根目录中,而是保存为一个临时文件,名称就是$_FILES['file']['tmp_name']的值,开发者必须把这个临时文件复制到存放的网站文件夹中。
$_FILES['file']['tmp_name']的值是由PHP设置的,与文件原始名称不一样,开发者必须使用$_FILES['file']['name']来取得上传文件的原始名称。
如图产生错误信息
文件上传漏洞
如果提供给网站访问者上传图片的功能,那必须小心访问者上传的实际可能不是图片,而是可以指定的PHP程序。如果存放图片的目录是一个开放的文件夹,则入侵者就可以远程执行上传的PHP文件来进行攻击。
下面是一个简单的文件上传例子:
<?php
// 设置上传文件的目录
$uploaddir = "D:/www/images/";
// 检查file是否存在
if (isset($_FILES['file']))
{
// 要放在网站目录中的完整路径,包含文件名
$uploadfile = $uploaddir . $_FILES['file']['name'];
// 将服务器存放的路径,移动到真实文件名
move_uploaded_file($_FILES['file']['tmp_name'], $uploadfile);
}
?>
……
<form method="post" enctype="multipart/form-data" name="form">
<input type="file" name="file" /><br />
<input type="submit" value="上传文件" />
<input type="hidden" name="MAX_FILE_SIZE" value="1024" />
</form>
这个例子没有检验文件后缀,可以上传任意文件,很明显的上传漏洞
相关文章推荐
- PHP漏洞全解(九)-文件上传漏洞
- WordPress Kernel Theme ‘upload-handler.php’任意文件上传漏洞
- WordPress Think Responsive Themes ‘upload_settings_image.php’任意文件上传漏洞
- WordPress Suco Themes ‘themify-ajax.php’任意文件上传漏洞
- PHP任意文件上传漏洞(CVE-2015-2348)
- 53. 文件上传篇——PHP CGI解析漏洞
- Fckeditor 2.4.2 php任意上传文件漏洞
- PHP任意文件上传漏洞
- PHP漏洞全解(PHP安全性/命令注入/脚本植入/xss跨站/SQL注入/伪跨站请求/Session劫持/HTTP响应拆分/文件上传漏洞)
- Fckeditor 2.4.2 php任意上传文件漏洞+修补方法
- PHP漏洞全解(九)-文件上传漏洞
- Fckeditor 2.4.2 php任意上传文件漏洞
- php实现将文件写入数据库、从数据库读取文件(防止图片上传漏洞)
- php文件包含+伪协议+文件上传漏洞利用实例
- Fckeditor 2.4.2 php任意上传文件漏洞
- WordPress Complete Gallery Manager插件‘upload-images.php’任意文件上传漏洞
- nginx+php 上传含有php脚本的木马图片文件的漏洞解决
- php 上传文件类型判断函数(避免上传漏洞 )
- PHP漏洞全解(九)-文件上传漏洞
- PHP漏洞全解(八)-文件上传漏洞