您的位置:首页 > 其它

[web安全] 上传漏洞之修复漏洞

2015-07-16 16:58 253 查看
上传漏洞最终的形成原因主要有以下两点:

1目录过滤不严,攻击者可能建立畸形目录。

2文件未重命名,攻击者可能利用Web容器解析漏洞。

<?php
if(!isset($_POST['submit'])){
exit();
}
$arr=Array('jpg','gif','jpeg','png','rar','zip','doc','docx');//白名单
$imageTempName=$_FILES['file']['tmp_name'];//接收临时文件路径
$imageName=$_FILES['file']['name'];//接收文件名称
$last=strtolower(substr($imageName,strrpos($imageName,".")+1));//取得扩展名,转换为小写
if(!in_array($last,$arr)){
exit("不支持上传的扩展名.$last...");
}
$Extension=$_POST['Extension'];//获取文件上传目录
$imageName=md5($imageName).".".$last;//对文件重命名
move_uploaded_file($imageTempName,"./$Extension/".$imageName);
echo("文件上传成功!!path=/$Extension/$imageName");
?>


安全的编码方案应该包含如下三个步骤:

1接收文件及其文件临时路径。

2获取扩展名与白名单做对比

3对文件进行重命名

这段代码如果上传目录是固定的,而不是通过参数来获得,将会更加安全。白名单已经将安全调整到很高的级别了,随后又对文件重命名,进一步降低了利用web容器解析漏洞的可能性。

“获取扩展名与白名单做对比”,攻击者只能考虑利用web容器的解析漏洞来绕过。之后“对文件进行重命名”,会破坏攻击者所构造的特殊文件名。

因此如果想突破这种后台代码,可能存在的攻击方法为PHP CGI解析漏洞。

如果进一步,对用户上传的文件做图片二次渲染处理,那么任何解析漏洞(包括PHP CGI)也会被防御,因为存在于图片中的代码将会被破坏。

二次渲染就是根据用户上传的图片,生成一个新的图片,然后删除用户上传的原始图片,将新图片存储到数据库中。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: