web上存漏洞及道理解析、防备办法(文件名检测漏洞)
添加时间:2013-6-3 点击量:
我们经由过程前篇:web上存漏洞及道理解析、防备办法 进修,已经知道后端获取办事器变量,很多来自客户端传入的。跟通俗的get,post没有什么不合。下面我们看看,常见呈现漏洞代码。
1、检测文件类型,并且用用户上存文件名保存
if(isset(¥_FILES[img]))
{
¥file = save_file(¥_FILES[img]);
if(¥file===false) exit(上存失败!);
echo 上存成功!,¥file;
}
function check_file(¥img)
{
///读取文件
if(¥img[error]>0) return false;
¥tmpfile = ¥img[tmp_name];
¥filename = ¥img[name];
///读取文件扩大名
¥len=strrpos(¥filename,.);
if(¥len===false) return false;
//获得扩大名
¥ext = strtolower(substr(¥filename,¥len+1));
if(!in_array(¥ext,array(jpg,jpeg,png))) return false;
return true;
}
function save_file(¥img)
{
if(!check_file(¥img)) return false;
//格局检测ok,筹办移动数据
¥filename = ¥img[name];
¥newfile = upload/ .¥filename;
if(!move_uploaded_file(¥img[tmp_name],¥newfile)) return false;
return ¥newfile;
}
?>
以上代码,对输入类型也做了断定,看了没有题目。然则题目,确恰好呈如今对获取的用户名变量检测上方。直接获取传入用户名,然后存为文件。 有伴侣会说:这些文件名都是我电脑里面存在的,文件名格局都受限于操纵体系对文件名定义。 然则,须要重视是,对于¥_FILES里面获取变量,是直接来自http request恳求。它跟通俗获取其它get,post变量一样。 是以,别有居心的人,往往会本身模仿浏览器,给办事器发送一个特别文件名。然后,让存文件时辰,可以或许正常保存为本身格局。
前些年,”\0” 在字符串中,保存为文件,会主动截断后面内容。 如:¥filename 机关为:”a.php\0.jpg” ,我们想想,将会变成怎么样?
¥newfile = “upload/a.php\0.jpg” 因为,对扩大名验证,最右边”.”后面字符是jpg ,是容许格局。 然则,我们一以该文件名,保存。 发明磁盘会在upload目次下面生成a.php ,\0后面所有字符,被主动截断。
该漏洞,风靡一时。当时几乎大多半上存网站都有漏洞。一时,很多平台封闭了上存。其实,根起原根蒂根基因就在此。我们拿到文件名,本身作为最毕生成文件名保存了。 好的办法,是本身随机生成文件名+读取扩大名 。如许可以组织输入特别字符,在进行文件保存时辰,被扔掉或截断了。
php4时代这个漏洞可以哄骗,到php5时代,生成的变量文件名值中,会主动过滤掉”\0” ,如许无论用户机关怎么样的特别”\0”用户名,都邑被截断。 然则 ,今朝这类漏洞,在asp,jsp 等站点。还经常有呈现。老版本的php站点也会经常呈现。
好了,今天先到这里,后面还有2种其它常见办法,后面给出!迎接交换!
作者:chengmo QQ:8292669
原文网址:http://blog.chacuo.net/136.html
订阅对峙存眷:http://blog.chacuo.net/feed
本文版权归作者所有,迎接转载,请务必添加原文链接。
文艺不是炫耀,不是花哨空洞的文字堆砌,不是一张又一张的逆光照片,不是将旅行的意义转化为名牌包和明信片的物质展示;很多时候它甚至完全不美——它嘶吼、扭曲,它会痛苦地抽搐,它常常无言地沉默。——艾小柯《文艺是一种信仰》
我们经由过程前篇:web上存漏洞及道理解析、防备办法 进修,已经知道后端获取办事器变量,很多来自客户端传入的。跟通俗的get,post没有什么不合。下面我们看看,常见呈现漏洞代码。
1、检测文件类型,并且用用户上存文件名保存
if(isset(¥_FILES[img]))
{
¥file = save_file(¥_FILES[img]);
if(¥file===false) exit(上存失败!);
echo 上存成功!,¥file;
}
function check_file(¥img)
{
///读取文件
if(¥img[error]>0) return false;
¥tmpfile = ¥img[tmp_name];
¥filename = ¥img[name];
///读取文件扩大名
¥len=strrpos(¥filename,.);
if(¥len===false) return false;
//获得扩大名
¥ext = strtolower(substr(¥filename,¥len+1));
if(!in_array(¥ext,array(jpg,jpeg,png))) return false;
return true;
}
function save_file(¥img)
{
if(!check_file(¥img)) return false;
//格局检测ok,筹办移动数据
¥filename = ¥img[name];
¥newfile = upload/ .¥filename;
if(!move_uploaded_file(¥img[tmp_name],¥newfile)) return false;
return ¥newfile;
}
?>
以上代码,对输入类型也做了断定,看了没有题目。然则题目,确恰好呈如今对获取的用户名变量检测上方。直接获取传入用户名,然后存为文件。 有伴侣会说:这些文件名都是我电脑里面存在的,文件名格局都受限于操纵体系对文件名定义。 然则,须要重视是,对于¥_FILES里面获取变量,是直接来自http request恳求。它跟通俗获取其它get,post变量一样。 是以,别有居心的人,往往会本身模仿浏览器,给办事器发送一个特别文件名。然后,让存文件时辰,可以或许正常保存为本身格局。
前些年,”\0” 在字符串中,保存为文件,会主动截断后面内容。 如:¥filename 机关为:”a.php\0.jpg” ,我们想想,将会变成怎么样?
¥newfile = “upload/a.php\0.jpg” 因为,对扩大名验证,最右边”.”后面字符是jpg ,是容许格局。 然则,我们一以该文件名,保存。 发明磁盘会在upload目次下面生成a.php ,\0后面所有字符,被主动截断。
该漏洞,风靡一时。当时几乎大多半上存网站都有漏洞。一时,很多平台封闭了上存。其实,根起原根蒂根基因就在此。我们拿到文件名,本身作为最毕生成文件名保存了。 好的办法,是本身随机生成文件名+读取扩大名 。如许可以组织输入特别字符,在进行文件保存时辰,被扔掉或截断了。
php4时代这个漏洞可以哄骗,到php5时代,生成的变量文件名值中,会主动过滤掉”\0” ,如许无论用户机关怎么样的特别”\0”用户名,都邑被截断。 然则 ,今朝这类漏洞,在asp,jsp 等站点。还经常有呈现。老版本的php站点也会经常呈现。
好了,今天先到这里,后面还有2种其它常见办法,后面给出!迎接交换!
文艺不是炫耀,不是花哨空洞的文字堆砌,不是一张又一张的逆光照片,不是将旅行的意义转化为名牌包和明信片的物质展示;很多时候它甚至完全不美——它嘶吼、扭曲,它会痛苦地抽搐,它常常无言地沉默。——艾小柯《文艺是一种信仰》作者:chengmo QQ:8292669
原文网址:http://blog.chacuo.net/136.html
订阅对峙存眷:http://blog.chacuo.net/feed
本文版权归作者所有,迎接转载,请务必添加原文链接。