Comment utiliser PHP pour crypter et transmettre les paramètres d'adresse URL afin d'améliorer la sécurité du site Web

不言
Libérer: 2023-03-24 10:54:01
original
4841 Les gens l'ont consulté

Cet article explique comment utiliser PHP pour crypter et transmettre les paramètres d'adresse URL afin d'améliorer la sécurité du site Web. Il a une certaine valeur de référence. Maintenant, je le partage avec vous. Les amis dans le besoin peuvent s'y référer

Lorsque les gens. utilisez PHP pour soumettre des données via GET ou POST, ils transmettent souvent des paramètres dans l'URL, tels que www.mdaima.com/get.php?id=1&page=5, où le numéro d'identification et le numéro de page sont des paramètres de transmission, le cas échéant. est transmis directement en texte clair, les paramètres seront directement exposés à l'utilisateur. S'il s'agit de données plus importantes, je pense qu'il n'est pas sûr de les transmettre ainsi. Serait-il préférable que les paramètres soient modifiés comme suit ?

1

1

www.mdaima.com/get.php?VGsAYQ96VzkEaF08DTxTLQIyDmsBIQtnVj0Fe1ciAD0EN1M0X2MHMQYxDDcAOwI%2FXToBPVM5ADxfag%3D%3D
Copier après la connexion



>

Améliorons-le un peu plus, renommez get.php en get_mb.php, puis utilisez Les règles statiques mappent get.html à get_mb.php, de sorte que même si l'utilisateur essaie d'accéder à get.php, le vrai fichier PHP ne peut pas être trouvé, car le vrai fichier PHP n'est pas get.php mais get_mb.php. Paramètres des règles .htaccess ?

1


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


1<🎜>


<🎜>
www.mdaima.com/get.html?VGsAYQ96VzkEaF08DTxTLQIyDmsBIQtnVj0Fe1ciAD0EN1M0X2MHMQYxDDcAOwI%2FXToBPVM5ADxfag%3D%3D
Copier après la connexion
Copier après la connexion


<🎜>

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

1

www.mdaima.com/get.html?VGsAYQ96VzkEaF08DTxTLQIyDmsBIQtnVj0Fe1ciAD0EN1M0X2MHMQYxDDcAOwI%2FXToBPVM5ADxfag%3D%3D
Copier après la connexion
Copier après la connexion


C'est déjà mieux en comparaison, au moins ça a l'air beaucoup mieux Alors comment le chiffrer et le décrypter ? Veuillez jeter un œil à la fonction suivante (Pas besoin de regarder attentivement, prenez-la simplement et utilisez-la, concentrez-vous sur la façon d'appeler )

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;; //可以更换为其它的加密标记,可以自由发挥
 
//---------------以上为加密函数-结束(复制过去就行了)-----------------
Copier après la connexion


以上这个是关键的加密与解密函数,下面看一下如何调用,我们举例说一下将表单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">
Copier après la connexion


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

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;];//这个是时间戳,大家可以利用这个参数判断一下链接生成的时间,就可以判断是否超时了(此项如果不需要也可以忽略)
Copier après la connexion


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

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


Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal