当前位置:首页 > 开发 > 编程语言 > PHP > 正文

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

发表于: 2011-05-04   作者:bardo   来源:转载   浏览次数:
摘要: php的函数伪静态也是这样做出来的。以下是函数伪静态所用的函数:   function MakeUrl($arr){ foreach($arr as $key=>$value){ $url[]=$key."_".$value; } $tmpurl=impl

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的入口文件。
这就是说,s.php/2/3/4/5.html这样的文件,均会当成PHP文件被执行。

关于文件上传漏洞问题。本文首发时,讲到的 some.php.png 会被当成PHP执行,实际是因某一类设置错误造成的。

而对于 some.php%3Fpng,即便存在这样的文件,相对于APACHE服务器的安全性,此文件也是禁止访问的。

当然:some.png.php肯定是不能上传到服务器上的。

但这也并不是说,上传就是完全安全。仍然存在通过上传文件名实现的URL的嵌入攻击。解决 URL的嵌入攻击的办法则是:
对所有的上传文件均进行改名。即不保存原始文件名。如果要保存,则必须去掉文件名中的"."以及其它可能有攻击性的语法。
我们推荐的做法是不保存原始文件名,即对原始文件名用md5或sha进行hash,如果要区分上传时间,可以加上时间戳,即生成的是纯a-z0-9文字的文件名。最后加上原始扩展名即可。
另一个方面:假如黑客能够攻击到操纵你的SHELL,那么,some.php.png则是可以被执行的。从这一点来说,关键不是在上传这一边控制,而是如何禁止服务器的远程脚本运行的安全配置问题了。

 

————————————————————————————————————————

后记:感谢1 楼 aweber 指出文中的错误。 此文发布时,有些问题,未经完全测试确认。 

 

 

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

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
上一篇已经已经讲述了mvc伪静态的代码实现。 下面以IIS 7.5为例演示一下IIS如何配置才能在服务器显
Rewirte主要的功能就是实现 URL的跳转和隐藏真实地址,基于Perl语言的正则 表达式规范。平时帮助我
IIS7.5 针对MVc3.0的配置: 0.确保安装了了MVC3.0等环境 1..NetFrameWork4.0 集成环境 2.处理映射程
ASP.NET MVC上传文件是必段撑握的知识。加强训练才是。 以前Insus.NET曾使用第三方MyAjaxForm.js :
这次来看下一个MVC网站上传文件的功能,其中上传用到uploadify这个jquery插件,网上还有很多类似的
转载自: http://semiscon.blog.51cto.com/157645/36976 版权属于原作者 何谓单点入口呢?我想PHP4
POST 方法上传 本特性可以使用户上传文本和二进制文件。用 PHP 的认证和文件操作函数,可以完全控制
搭建PHP提交文件服务: upload.php <?php if ($_FILES["file"]["name"] != "") { if ($_FILES["f
发布:JB01 来源: 脚本学堂 【 大 中 小 】 分享一例php文件上传的代码,很简单,适合初学的朋友参
Springmvc文件上传: 1.代码截图如下: 2.UploadController.java: package cn.csdn.controller; imp
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号