zoukankan      html  css  js  c++  java
  • 分享如何使用PHP将URL地址参数进行加密传输提高网站安全性

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

    1
    www.mdaima.com/get.php?VGsAYQ96VzkEaF08DTxTLQIyDmsBIQtnVj0Fe1ciAD0EN1M0X2MHMQYxDDcAOwI/XToBPVM5ADxfag==

    我们再加强一下,将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/XToBPVM5ADxfag==

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

    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 <</code>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 <</code>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 <</code>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
    "form1"  name= "form1"  method= "post"  action= "?

    0

    阅读 评论 收藏 转载 喜欢 打印举报
    已投稿到:
    加载中,请稍候......
    评论加载中,请稍候...
    发评论

    登录名:密码:找回密码 注册 记住登录状态

    昵   称:

    评论并转载此博文sg_trans.gif

    发评论

    以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

      

    新浪BLOG意见反馈留言板 不良信息反馈 电话:4006900000 提示音后按1键(按当地市话标准计费) 欢迎批评指正

    新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 会员注册 | 产品答疑

    新浪公司 版权所有

  • 相关阅读:
    [LeetCode 1029] Two City Scheduling
    POJ 2342 Anniversary party (树形DP入门)
    Nowcoder 106 C.Professional Manager(统计并查集的个数)
    2018 GDCPC 省赛总结
    CF 977 F. Consecutive Subsequence
    Uva 12325 Zombie's Treasure Chest (贪心,分类讨论)
    Poj 2337 Catenyms(有向图DFS求欧拉通路)
    POJ 1236 Network of Schools (强连通分量缩点求度数)
    POJ 1144 Network (求割点)
    POJ 3310 Caterpillar(图的度的判定)
  • 原文地址:https://www.cnblogs.com/lxwphp/p/15454991.html
Copyright © 2011-2022 走看看