Heim  >  Artikel  >  Backend-Entwicklung  >  So verwenden Sie PHP zum Verschlüsseln und Übertragen von URL-Adressparametern, um die Website-Sicherheit zu verbessern

So verwenden Sie PHP zum Verschlüsseln und Übertragen von URL-Adressparametern, um die Website-Sicherheit zu verbessern

不言
不言Original
2018-04-18 15:13:564840Durchsuche

Dieser Artikel stellt vor, wie man PHP zum Verschlüsseln und Übertragen von URL-Adressparametern verwendet, um die Website-Sicherheit zu verbessern. Jetzt kann ich ihn mit Ihnen teilen.

Wenn Leute Verwenden Sie PHP, um Daten über GET oder POST zu übermitteln. Sie übergeben häufig Parameter in der URL, z. B. www.mdaima.com/get.php?id=1&page=5, wobei die ID-Nummer und die Seitennummer ggf. Parameter sind Wird direkt im Klartext übertragen, werden die Parameter dem Benutzer direkt angezeigt. Wenn es sich um wichtigere Daten handelt, ist es meiner Meinung nach nicht sicher, sie auf diese Weise zu übertragen. Wäre es besser, wenn die Parameter wie folgt geändert würden?

1

1

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



Lassen Sie es uns noch ein wenig steigern und get.php in get_mb.php umbenennen und dann verwenden Statische Regeln ordnen get.html get_mb.php zu, sodass die echte PHP-Datei nicht gefunden werden kann, selbst wenn der Benutzer versucht, auf get.php zuzugreifen, da die echte PHP-Datei nicht get.php, sondern get_mb.php ist .htaccess-Regeleinstellungen?

1


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


1


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


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

1

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


Im Vergleich ist es schon besser, zumindest sieht es viel besser aus. Wie kann man es also verschlüsseln und entschlüsseln? Bitte werfen Sie einen Blick auf die folgende Funktion (Sie müssen nicht genau hinsehen, nehmen Sie sie einfach und verwenden Sie sie, konzentrieren Sie sich darauf, wie man aufruft)

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(&#39;&&#39;,$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 = &#39;mdaima.com-123-scc&#39;; //可以更换为其它的加密标记,可以自由发挥
 
//---------------以上为加密函数-结束(复制过去就行了)-----------------


以上这个是关键的加密与解密函数,下面看一下如何调用,我们举例说一下将表单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[&#39;page&#39;];//解密对应参数
$id=$url_info[&#39;id&#39;];
$time=$url_info[&#39;time&#39;];//这个是时间戳,大家可以利用这个参数判断一下链接生成的时间,就可以判断是否超时了(此项如果不需要也可以忽略)


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

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


Das obige ist der detaillierte Inhalt vonSo verwenden Sie PHP zum Verschlüsseln und Übertragen von URL-Adressparametern, um die Website-Sicherheit zu verbessern. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn