[web安全] 上传漏洞之修复漏洞
2015-07-16 16:58
253 查看
上传漏洞最终的形成原因主要有以下两点:
1目录过滤不严,攻击者可能建立畸形目录。
2文件未重命名,攻击者可能利用Web容器解析漏洞。
安全的编码方案应该包含如下三个步骤:
1接收文件及其文件临时路径。
2获取扩展名与白名单做对比
3对文件进行重命名
这段代码如果上传目录是固定的,而不是通过参数来获得,将会更加安全。白名单已经将安全调整到很高的级别了,随后又对文件重命名,进一步降低了利用web容器解析漏洞的可能性。
“获取扩展名与白名单做对比”,攻击者只能考虑利用web容器的解析漏洞来绕过。之后“对文件进行重命名”,会破坏攻击者所构造的特殊文件名。
因此如果想突破这种后台代码,可能存在的攻击方法为PHP CGI解析漏洞。
如果进一步,对用户上传的文件做图片二次渲染处理,那么任何解析漏洞(包括PHP CGI)也会被防御,因为存在于图片中的代码将会被破坏。
二次渲染就是根据用户上传的图片,生成一个新的图片,然后删除用户上传的原始图片,将新图片存储到数据库中。
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)也会被防御,因为存在于图片中的代码将会被破坏。
二次渲染就是根据用户上传的图片,生成一个新的图片,然后删除用户上传的原始图片,将新图片存储到数据库中。
相关文章推荐
- CRM 2011 上传附件
- 高并发数据采集的架构应用(Redis的应用)(转)
- 分析三层架构
- 总结CSS3新特性(媒体查询篇)
- 转:onConfigurationChanged的作用
- ExCEL通过添加些类操作
- Value does not fall within the expected range 值不在预期的范围内
- 进程与线程区别
- 石化行业应急指挥系统
- JS鼠标事件
- JavaScript客户端存储
- Android.mk简介
- Spring中数据库连接池的配置_me
- Fragment状态保存
- Linux下touch命令有什么作用如何使用?
- edgesForExtendedLayout、automaticallyAdjustsScrollViewInsets属性
- javascript中的hasOwnProperty和isPrototypeOf
- 根据ImageView的大小来压缩Bitmap,避免OOM
- Android Fragment 你应该知道的一切
- ModelGoon安装