注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

@fc_lamp

关注Web应用解决方案MySql/PHP/Python一盏名为"飞川"的灯~

 
 
 

日志

 
 

php函数伪静态、MVC单一入口与文件上传安全漏洞  

2011-05-25 23:14:00|  分类: Web技术-Php |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

php中有一个让人不解的特性,那就是,如果文件名中有".php",则会自动调用PHP引擎,当成PHP脚本处理。
php的函数伪静态也是这样做出来的。
以下是函数伪静态所用的函数:

 # function MakeUrl($arr){   
#          foreach($arr as $key=>$value){   
#                  $url[]=$key."_".$value;   
#          }   
#          $tmpurl=implode("_",$url);   
#          return $tmpurl.".htm";   
# }   
#   
# function ParseUrl(){   
#     if($_SERVER['PATH_INFO']!=""){   
#          $pathinfo=substr($_SERVER['PATH_INFO'],1);   
#          $pathinfo=str_replace(".htm","",$pathinfo);   
#          $path=explode("_",$pathinfo);   
#          $count=count($path);   
#          for($i=0;$i<$count;$i+=2){   
#                  $_GET[$path[$i]]=$path[$i+1];   
#          }   
#     }   
# }   
# //使用实例,链接页面   
# $path="http://www.tiaotiaola.com/blog.php/";   
# $path.=MakeUrl(array('BlogID'=>2,'page'=>1));   
# 以上两行代码生成页面中的URL。  
# //浏览页面,调用函数ParseUrl();直接可以使用变量$_GET

 

当然,很多MVC框架中,均支持这样的功能,但在MVC框架中,并不一定是用上面两个函数实现的了。
其实,它不仅是伪静态所需。同时也是MVC所必须要的功能。这是因为,MVC中的所谓的单一入口,也是凭此功能实现的。
我们可以见到很多网站,链接象  http://www.tiaotiaola.com/s/2/3/4/5.html
实际是经过.htaccess,或者是UrlRewrite处理过的。未处理之前是:http://www.tiaotiaola.com/s.php/2/3/4/5.html
s.php一定是MVC的入口文件。
这就是说,some.php.png,s.php/2/3/4/5.html这样的文件,均会当成PHP文件被执行。
这也就引发了另一个问题:
如果我上传一个文件,名为:some.php.png,那我肯定能够上传成功。
因而,我就可以在上传成功后,再次请求这一个URL。于是,黑客攻击就能轻松实现。

当然,要阻止这一问题并不难,第一,我们可以在上传目录增加一个.htaccess,内容如下,
<Directory  "/uploads/"> 
       <Files  ~  ".php"> 
       Order  allow,deny 
       Deny  from  all 
       </Files> 
</Directory>
很显然,它的目的就是禁止文件以PHP方式执行。
另外,最彻底的解决办法,则是:对所有的上传文件均进行改名。即不保存原始文件名。如果要保存,则必须去掉文件名中的"."以及其它可能有攻击性的语法。
我们推荐的做法是不保存原始文件名,即对原始文件名用md5或sha进行hash,如果要区分上传时间,可以加上时间戳,即生成的是纯a-z0-9文字的文件名。最后加上原始扩展名即可。

 

另注:来至于:http://bardo.iteye.com/blog/1028827

           待测试

  评论这张
 
阅读(237)| 评论(2)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017