聆听风声 点点滴滴都很珍贵!

PHP 伪静态实现技术原理讲解

2020-05-24

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

实现方法

// 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/中,然后访问http://127.0.0.1/inj.php?id=1

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

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;
}

Comments

Content