分享如何使用PHP將URL地址參數進行加密傳輸提升網站安全性

你們在使用PHP進行GET或POST提交數據時,常常會在URL帶着參數進行傳遞,好比www.mdaima.com/get.php?id=1&page=5,這裏就將id編號和page頁碼進行了參數傳遞,若是這樣直接明文傳輸,會將參數直接暴露給用戶,要是是比較重要的數據這樣傳輸我以爲仍是不太安全。那若是將參數變成下面這樣,是否是會好點呢?php

1html

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規則設置?函數

1post

RewriteRule ^get.html$ get_mb.php?&%{QUERY_STRING}   #.htaccess僞靜態規則的設置(加入到.htaccess裏就行)網站

利用加密再配合僞靜態設置,最終效果就是下面這樣了,即隱藏了真實php文件get_mb.php又將參數都加密傳輸了。加密

1url

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

相比之下已經好一些了吧,至少看上去會好不少,那如何進行加密和解密呢?請看下面函數(不用細看,直接拿過去用就好了,重點看若是調用).net

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參數了,你們試一下吧,有問題也能夠聯繫我!

轉載請註明:分享如何使用PHP將URL地址參數進行加密傳輸提升網站安全性 | 碼代碼-李雷博客

相關文章
相關標籤/搜索