`
bardo
  • 浏览: 378363 次
  • 性别: Icon_minigender_1
  • 来自: 上海
博客专栏
D1407912-ab64-3e76-ae37-b31aa4afa398
浅述PHP设计模式
浏览量:11807
9d6df9f7-91da-3787-a37c-0e826525dd5d
Zend Framewor...
浏览量:10116
85b628bd-a2ed-3de2-a4b1-0d34985ae8b6
PHP的IDE(集成开发环...
浏览量:9504
社区版块
存档分类
最新评论

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

    博客分类:
  • 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的入口文件。
这就是说,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 指出文中的错误。 此文发布时,有些问题,未经完全测试确认。 

 

 

0
4
分享到:
评论
1 楼 aweber 2011-06-08  
"php中有一个让人不解的特性,那就是,如果文件名中有".php",则会自动调用PHP引擎,当成PHP脚本处理。"
这句话是错误的。用什么样的程序来处理什么样后缀名的请求,是根据web服务器(apahce,nginx)设置的。
举个例子 apache 可以使用action命令来设置
actioin application/x-httpd-php "/php/php-cgi.exe" 这条命令是表明当请求application/x-httpd-php媒体类型的请求时,使用/php/php-cgi.exe来处理这个请求
同时,可以使用addType来建立后缀名和媒体类型的映射关系
addType application/x-httpd-php .php  这样,当请求是以.php为后缀名,则认为是application/x-httpd-php类题类型的,
这样,如果你愿意,也可以设置成
addType application/x-httpd-php .example,那么当你请求xxx.example的时候,这个文件也会被当成php文件来解析 

相关推荐

    asp.net伪静态完整代码

    ASP.NET伪静态技术是Web开发中的一个重要概念,它主要用于优化网站的搜索引擎友好度(SEO)以及提高用户体验。在传统的ASP.NET应用程序中,URL通常会显示实际的文件路径和扩展名,例如“Default.aspx”或...

    构造函数与静态块的执行顺序

    在探讨继承中子类与父类构造函数及静态块的执行顺序时,我们首先需要理解构造函数和静态块的基本概念及其在Java中的作用。构造函数主要用于初始化对象的状态,而静态块则是在类加载到内存中时执行的一段代码,通常...

    伪静态注入中转突破伪静态

    【伪静态注入中转突破伪静态】是一种网络安全技术,用于在动态网站中模拟静态页面,以提高搜索引擎优化和用户体验。然而,这种技术也带来了一定的安全隐患,因为伪静态URL结构使得传统SQL注入攻击手段变得更为复杂。...

    Nginx和Apache之伪静态设置 (运维珍藏版)

    #### 二、真静态与伪静态的优缺点分析 ##### 2.1 真静态(html)的优缺点 **优点**: 1. **减轻服务器负担**:由于真静态页面不需要实时从数据库中获取数据,因此可以显著降低服务器的数据响应负荷。 2. **加载速度较...

    PHP函数库,PHP函数大全,PHP函数实例,PHP函数手册,PHP5函数库实例

    PHP函数库,PHP函数大全,PHP函数实例,PHP函数手册,PHP5函数库实例 PHP函数库,PHP函数大全,PHP函数实例,PHP函数手册,PHP5函数库实例 curl获取远程文件内容 GD显示中文 PHP GIF动画生成类 PHP HTML转UBB函数 PHP ...

    DLL函数查看器,查看DLL文件入口函数

    本篇文章将深入探讨如何使用DLL函数查看器来查看C语言编写的DLL文件的入口函数。 首先,我们要理解DLL文件的结构。在C语言中,DLL的入口点通常是`DllMain`函数,这是DLL加载和卸载时被系统调用的地方。`DllMain`...

    基于PHP的39健康问答伪静态php版源码.zip

    【39健康问答伪静态PHP源码解析】 39健康问答是一个在线健康咨询平台,而“伪静态”技术则是为了优化网站的搜索引擎友好性及用户体验而设计的一种技术手段。在这个基于PHP的39健康问答系统中,源码实现了将动态URL...

    基于PHP的KASEN动漫伪静态缓存版php版源码.zip

    【标题】"基于PHP的KASEN动漫伪静态缓存版php版源码"是一个针对动漫网站开发的项目,它采用PHP编程语言实现,并且具备伪静态和缓存功能。这个项目的核心目标是提高网站的性能和用户体验,通过伪静态技术优化搜索引擎...

    Qt静态函数发送信号

    需要注意的是,由于我们在静态函数中发送信号,所以必须使用`QObject::connect`的C++11语法,这样可以连接到静态信号和静态槽。 然而,由于静态函数无法直接访问非静态成员,如果想要在静态信号发射时传递数据,...

    Mvc Ajax 上传文件

    在ASP.NET MVC框架中,使用Ajax进行文件上传是一种常见的需求,它可以实现无刷新的用户体验,提高网站的交互性。本文将详细讲解如何在Mvc中利用Ajax实现文件上传,并探讨相关的关键知识点。 首先,我们需要理解MVC...

    基于PHP的最新的搜搜问问php商业版(伪静态)源码.zip

    【标题】:“基于PHP的最新的搜搜问问php商业版(伪静态)源码.zip”指出这是一个使用PHP编程语言开发的搜索引擎或问答系统。"搜搜问问"可能是一个类似百度知道或者腾讯问问的在线问答平台,它允许用户提出问题、回答...

    基于PHP的SK电影伪静态缓存极速版v1.1源码.zip

    【标题】"基于PHP的SK电影伪静态缓存极速版v1.1源码"指出,这是一款使用PHP编程语言开发的电影网站源代码,它实现了伪静态和缓存技术,旨在提高网站的访问速度和用户体验。在互联网行业中,伪静态技术是将动态URL...

    ASP源码—IIS伪静态文件 v1.0.zip

    ASP源码—IIS伪静态文件 v1.0.zip是一个包含ASP编程语言编写的源代码的压缩包,专门用于实现IIS(Internet Information Services)服务器上的伪静态功能。伪静态技术是一种将动态网页转换为静态HTML页面的技术,目的...

    DLLimpLibTool-DLL函数导入静态库生成改名等工具集

    在生成静态导入库的过程中,LINK.EXE会将DLL的函数声明与库关联起来,创建一个供编译器使用的.lib文件。 3. `DLL函数导入静态库生成器.exe`:这是一个专用工具,用于从DLL文件生成对应的静态导入库文件。通过这个...

    php静态 页面生成

    接着,函数尝试打开这个文件,写入缓冲区的内容,然后关闭文件。最后,返回缓冲区的内容,这使得浏览器仍然能够接收到动态生成的页面。 在示例中,`static.php`包含了`CreateShtml`函数,而`phpfans.php`则调用了这...

    淘宝帮派小偷程序PHP伪静态版 v1.0

    淘宝帮派小偷程序PHP伪静态版v1.0是一个基于PHP开发的工具,主要用于从淘宝门户帮派抓取和展示信息。这个程序的核心功能在于能够自动获取并更新淘宝帮派上的内容,使得用户可以在自己的网站上查看这些信息,而无需...

    基于PHP的SK图片抓取伪静态缓存版源码.zip

    【标题】"基于PHP的SK图片抓取伪静态缓存版源码.zip" 提供的是一种使用PHP语言实现的图片抓取系统,该系统具备伪静态处理和缓存功能,适用于网站图片资源的自动化获取与优化。在互联网环境中,图片抓取技术常用于...

    基于PHP的张戈博客自用的php网址在线转换二维码的API(伪静态)源码.zip

    该压缩包文件“基于PHP的张戈博客自用的php网址在线转换二维码的API(伪静态)源码.zip”提供了一套使用PHP编写的API,用于将网址转换为二维码,适用于个人博客或网站,实现快速分享和访问。下面将详细阐述PHP编程语言...

    PHP实例开发源码—SK百度知道爬虫伪静态缓存极速版 php版.zip

    标题中的“PHP实例开发源码—SK百度知道爬虫伪静态缓存极速版 php版.zip”揭示了这个压缩包的内容主要是关于PHP编程的一个实例项目,它是一个百度知道问答平台的爬虫程序,具有伪静态处理和高速缓存功能。...

    PHP页面静态化——纯静态与伪静态用法详解

    全部纯静态则是整个页面内容生成单一静态文件。伪静态化则是一种表象上的静态化,它实际上仍然是动态页面,但URL看起来像是静态页面,比如把URL从/index.php改为/index.html。这种做法能够简化URL的路径,有助于搜索...

Global site tag (gtag.js) - Google Analytics