• 技术文章 >后端开发 >php教程

    如何使用PHP将URL地址参数进行加密传输提高网站安全性

    不言不言2018-04-18 15:13:56原创3335
    这篇文章介绍的内容是关于如何使用PHP将URL地址参数进行加密传输提高网站安全性,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下

    大家在使用PHP进行GET或POST提交数据时,经常会在URL带着参数进行传递,比如www.mdaima.com/get.php?id=1&page=5,这里就将id编号和page页码进行了参数传递,如果这样直接明文传输,会将参数直接暴露给用户,要是是比较重要的数据这样传输我觉得还是不太安全。那如果将参数变成下面这样,是不是会好点呢?

    1

    www.mdaima.com/get.php?VGsAYQ96VzkEaF08DTxTLQIyDmsBIQtnVj0Fe1ciAD0EN1M0X2MHMQYxDDcAOwI%2FXToBPVM5ADxfag%3D%3D


    我们再加强一下,将get.php重命名改为get_mb.php,然后利用静态规则,把get.html映射到get_mb.php,这样即使用户试着访问get.php也无法找到真实的PHP文件了,因为真实的PHP文件不是get.php而是get_mb.php,以下是.htaccess规则设置?

    1


    RewriteRule ^get.html$ get_mb.php?&%{QUERY_STRING}   #.htaccess伪静态规则的设置(加入到.htaccess里就行)


    利用加密再配合伪静态设置,最终效果就是下面这样了,即隐藏了真实php文件get_mb.php又将参数都加密传输了。

    1

    www.mdaima.com/get.html?VGsAYQ96VzkEaF08DTxTLQIyDmsBIQtnVj0Fe1ciAD0EN1M0X2MHMQYxDDcAOwI%2FXToBPVM5ADxfag%3D%3D


    相比之下已经好一些了吧,至少看上去会好很多,那如何进行加密和解密呢?请看下面函数(不用细看,直接拿过去用就行了,重点看如果调用

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    25

    26

    27

    28

    29

    30

    31

    32

    33

    34

    35

    36

    37

    38

    39

    40

    41

    42

    43

    44

    45

    46

    47

    48

    49

    50

    51

    52

    53

    54

    55

    56

    57

    58

    59

    60

    61

    62

    //---------------以下为加密函数(复制过去就行了)-----------------
    function keyED($txt,$encrypt_key){       
        $encrypt_key =    md5($encrypt_key);
        $ctr=0;       
        $tmp = "";       
        for($i=0;$i<strlen($txt);$i++)       
        {           
            if ($ctr==strlen($encrypt_key))
            $ctr=0;           
            $tmp.= substr($txt,$i,1) ^ substr($encrypt_key,$ctr,1);
            $ctr++;       
        }       
        return $tmp;   
    }    
    function encrypt($txt,$key)   {
        $encrypt_key = md5(mt_rand(0,100));
        $ctr=0;       
        $tmp = "";      
         for ($i=0;$i<strlen($txt);$i++)       
         {
            if ($ctr==strlen($encrypt_key))
                $ctr=0;           
            $tmp.=substr($encrypt_key,$ctr,1) . (substr($txt,$i,1) ^ substr($encrypt_key,$ctr,1));
            $ctr++;       
         }       
         return keyED($tmp,$key);
    } 
    
        
    function decrypt($txt,$key){       
        $txt = keyED($txt,$key);       
        $tmp = "";       
        for($i=0;$i<strlen($txt);$i++)       
        {           
            $md5 = substr($txt,$i,1);
            $i++;           
            $tmp.= (substr($txt,$i,1) ^ $md5);       
        }       
        return $tmp;
    }
    function encrypt_url($url,$key){
        return rawurlencode(base64_encode(encrypt($url,$key)));
    }
    function decrypt_url($url,$key){
        return decrypt(base64_decode(rawurldecode($url)),$key);
    }
    function geturl($str,$key){
        $str = decrypt_url($str,$key);
        $url_array = explode('&',$str);
        if (is_array($url_array))
        {
            foreach ($url_array as $var)
            {
                $var_array = explode("=",$var);
                $vars[$var_array[0]]=$var_array[1];
            }
        }
        return $vars;
    }
     
    $key_url_md_5 = 'mdaima.com-123-scc'; //可以更换为其它的加密标记,可以自由发挥
     
    //---------------以上为加密函数-结束(复制过去就行了)-----------------


    以上这个是关键的加密与解密函数,下面看一下如何调用,我们举例说一下将表单action中参数id和page进行加密并加入时间戳一起,这样每次的链接地址都是动态的,而且可以在接收页面设置页面限制超时的有效期了。

    1

    <form id="form1" name="form1" method="post" action="?<?=encrypt_url("id=1&page=5"."&time=".time(),$key_url_md_5)?>" enctype="multipart/form-data">


    上面就是如何加密参数。再看一下如何解密接收到的参数:

    1

    2

    3

    4

    $url_info = geturl($_SERVER[QUERY_STRING],$key_url_md_5);//接收所有参数
    $page=$url_info['page'];//解密对应参数
    $id=$url_info['id'];
    $time=$url_info['time'];//这个是时间戳,大家可以利用这个参数判断一下链接生成的时间,就可以判断是否超时了(此项如果不需要也可以忽略)


    这样我们就得到了解密的$page和$id参数了,大家试一下吧,有问题也可以联系我!

    转载出处:http://www.mdaima.com/jingyan/36.html

    以上就是如何使用PHP将URL地址参数进行加密传输提高网站安全性的详细内容,更多请关注php中文网其它相关文章!

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    专题推荐:php 进行 参数
    上一篇:js+php分片上传大文件 下一篇:Nginx 502报错(django+nginx,而非php-fmp)
    20期PHP线上班

    相关文章推荐

    • 【活动】充值PHP中文网VIP即送云服务器• PHP内建恒量 • PHP:非一般语法记录 • 不知道错哪了,快崩溃了 • 求高手,看上这段正则错哪了? • 可不可以推荐PHP入门书籍
    1/1

    PHP中文网