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 指出文中的错误。 此文发布时,有些问题,未经完全测试确认。
分享到:
相关推荐
描述继承中子类与父类构造函数,静态块的执行顺序
C_语言静态变量和静态函数,可以让您对C语言静态变量和静态函数有更清晰的认识
PHP函数库,PHP函数大全,PHP函数实例,PHP函数手册,PHP5函数库实例 PHP函数库,PHP函数大全,PHP函数实例,PHP函数手册,PHP5函数库实例 curl获取远程文件内容 GD显示中文 PHP GIF动画生成类 PHP HTML转UBB函数 PHP ...
汇编 入口 函数汇编 入口 函数汇编 入口 函数汇编 入口 函数汇编 入口 函数汇编 入口 函数汇编 入口 函数汇编 入口 函数汇编 入口 函数汇编 入口 函数
本文实例讲述了PHP从零开始打造自己的MVC框架之入口文件实现方法。分享给大家供大家参考,具体如下: 首先来了解一下框架的运行流程: 入口文件 -> 定义常量 -> 引入函数库 -> 自动加载类 -> 启动框架 -> 路由解析 ...
C++Hook(钩子)编程,通过内联汇编,使类成员函数代替全局函数(静态函数)[收集].pdf
PHP文件处理及文件上传函数,详细过程请下载文件查看源码
ASP伪静态大师适用与任何ASP网站,可使用任意字符串作为连接的后缀名,也可直接将连接加密,有利益网站的优化和推广,有利于防注入攻击等,傻瓜式配置,不懂ASP的也可轻松配置出你想要的后缀名伪静态。如(将.asp...
对C++静态成员函数和静态成员变量的使用方法和内部机制进行的经验总结
一般地,线程要读写类的私有成员变量,只有两种方法:将全局函数声明为类友元friend,或者使用静态的成员函数static。那非静态的成员函数呢?一般地方都说的是,不行,做不了。。。为什么不行?都是代码区的代码,...
个PHP伪静态是另一个结合比较好的一个,比上一篇文章复杂点,建议大家结合上一
DLL函数查看器,查看C语言写的DLL文件入口函数
绝密_链接编译报错 2个静态库包含同名函数的处理方法 ,常用于嵌入式 移植开发过程中 静态库 相同函数 重复定义的error
C++中静态成员函数与静态成员变量(static ) 这篇介绍了静态成员函数与静态成员变量,是我的读书笔记,我希望它够简短但又比较全面,起到复习的作用。如果有一些C++知识记不清楚了,它可以帮你很快回忆起来。 复习...
讲述Qt如何实现静态函数中发送信号,对应文章: https://lizhifun.blog.csdn.net/article/details/112631489
文件包含漏洞简介 文件包含漏洞简介 1、什么是文件包含漏洞? 开发人员通常会把可重复使用的函数写到单个文件中,在使用某些函数时,直接调用此文件,而无需再次编写,这种调用文件的过程一般被称为包含。 为了使...
在开发的过程中老早就听说了“伪静态”这一说。但是一直没有对其进行了解。今天通过本篇文章仔细学习下。 首先,什么是伪静态: 伪静态又名URL重写,是动态的网址看起来像静态的网址。换句话说就是,动态网页通过...
mod_rewrite是Apache的一个非常强大的功能,它可以实现伪静态页面。下面我详细说说它的使用方法 1.检测Apache是否支持mod_rewrite 通过php提供的phpinfo()函数查看环境配置,通过Ctrl+F查找到“Loaded Modules”,...
6.伪静态页面,更有利于搜索引擎收录 [系统环境需求] 1、Windows 平台: IIS/Apache PHP5 2、Linux/Unix 平台 Apache PHP5 建议使用平台:Linux Apache2.2 PHP5.2 3、PHP必须环境或启用的系统函数: ...
静态成员函数与非静态成员函数的区别 数据成员: 静态数据成员是类的一部分,为类的所有实例共享(静态区);非静态数据成员,类的每个实例都有一份拷贝(动态区)。 静态数据成员的访问: 静态数据成员是类的一部分,在...