来源:自学PHP网 时间:2015-04-17 12:00 作者: 阅读:次
[导读] 微博上传图片时只在前端进行验证, 服务器端没有进行安全过滤。\api\StatusesApi.class.phpfunction uploadpic(){ if( $_FILES[#39;pic#39;] ){ //执行上传操作 $savePath = $this-_getS......
微博上传图片时只在前端进行验证, 服务器端没有进行安全过滤。
\api\StatusesApi.class.php
function uploadpic(){
if( $_FILES['pic'] ){
//执行上传操作
$savePath = $this->_getSaveTempPath();
$filename = md5( time().'teste' ).'.'.substr($_FILES['pic']['name'],strpos($_FILES['pic']['name'],'.')+1);
if(@copy($_FILES['pic']['tmp_name'], $savePath.'/'.$filename) || @move_uploaded_file($_FILES['pic']['tmp_name'], $savePath.'/'.$filename))
{
$result['boolen'] = 1;
$result['type_data'] = 'temp/'.$filename;
$result['picurl'] = SITE_PATH.'/uploads/temp/'.$filename;
} else {
$result['boolen'] = 0;
$result['message'] = '上传失败';
}
}else{
$result['boolen'] = 0;
$result['message'] = '上传失败';
}
return $result;
}
unloadpic()方法没有对文件类型进行验证
可以构建表单, 选择任意文件, 提交到
/index.php?app=w3g&mod=Index&act=doPost
在新提交的微博上可以找到上传的文件地址(去掉small_、middle_ 前缀)
在登录thinksns官方微博后, 构建以下表单:
<form action="http://t.thinksns.com/index.php?app=w3g&mod=Index&act=doPost" method="post" enctype="multipart/form-data" />
<textarea name="content">test</textarea>
file: <input id="file" type="file" name="pic" />
<input type="submit" value="Post" />
</form> www.2cto.com
去掉缩略图的前缀(small_ )
修复方案:
\api\StatusesApi.class.php function uploadpic(){
/**
* 20121018 @yelo
* 增加上传类型验证
*/
$pathinfo = pathinfo($_FILES['pic']['name']);
$ext = $pathinfo['extension'];
$allowExts = array('jpg', 'png', 'gif', 'jpeg');
$uploadCondition = $_FILES['pic'] && in_array(strtolower($ext),$allowExts,true);
if( $uploadCondition ){
//执行上传操作
$savePath = $this->_getSaveTempPath();
$filename = md5( time().'teste' ).'.'.substr($_FILES['pic']['name'],strpos($_FILES['pic']['name'],'.')+1);
if(@copy($_FILES['pic']['tmp_name'], $savePath.'/'.$filename) || @move_uploaded_file($_FILES['pic']['tmp_name'], $savePath.'/'.$filename))
{
$result['boolen'] = 1;
$result['type_data'] = 'temp/'.$filename;
$result['picurl'] = SITE_PATH.'/uploads/temp/'.$filename;
} else {
$result['boolen'] = 0;
$result['message'] = '上传失败';
}
}else{
$result['boolen'] = 0;
$result['message'] = '上传失败';
}
return $result;
}
|
自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习
京ICP备14009008号-1@版权所有www.zixuephp.com
网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com