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 | 会员注册 | 产品答疑

    新浪公司 版权所有

  • 相关阅读:
    +7白盒测试与黑盒测试的定义与区别
    对于逆序数组,,选择排序 和 插入排序 那个更快?
    +1.1向量 链表 数组
    3.2 二十三种设计模式全解析
    3.1软件体系结构风格
    Mysql: 强制走索引:mysql between 日期索引 索引问题-日期索引使用
    php: xampp安装对应的phalcon版本(3.2.2-php5.6):比如redis-php5.6, php_igbinary-5.6
    京东自营,你TM太坑了。
    php:微信公众平台上传多媒体接口 41005错误
    php:如何使用PHP排序, key为字母+数字的数组(多维数组)
  • 原文地址:https://www.cnblogs.com/lxwphp/p/15454991.html
Copyright © 2011-2022 走看看