ホームページ  >  記事  >  バックエンド開発  >  PHP を使用して URL アドレスパラメータを暗号化して送信し、Web サイトのセキュリティを向上させる方法

PHP を使用して URL アドレスパラメータを暗号化して送信し、Web サイトのセキュリティを向上させる方法

不言
不言オリジナル
2018-04-18 15:13:564772ブラウズ

この記事では、Web サイトのセキュリティを向上させるために、PHP を使用して URL アドレス パラメーターを暗号化して送信する方法を紹介します。必要なときに参考にしてください。 POST 経由でデータを送信する場合、www.mdaima.com/get.php?id=1&page=5 などの URL でパラメータが渡されることがよくあります。この場合、ID 番号とページ番号がパラメータとして渡されます。プレーンテキストで直接渡されます。より重要なデータの場合、送信は安全ではないと思います。パラメータを以下のように変更した方が良いでしょうか?

1 。実際の PHP ファイルは get.php ではなく get_mb.php であるため、ユーザーが get.php にアクセスしようとしても、実際の PHP ファイルを見つけることができません。次の .htaccess ルールは何ですか。設定?
www.mdaima.com/get.php?VGsAYQ96VzkEaF08DTxTLQIyDmsBIQtnVj0Fe1ciAD0EN1M0X2MHMQYxDDcAOwI%2FXToBPVM5ADxfag%3D%3D

1


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

1

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


比較するとすでに優れていますが、少なくとも見た目ははるかに優れています。それでは、どうやって暗号化および復号化するのでしょうか?次の関数を見てください(よく見る必要はありません、ただ取得して使用し、呼び出し方に注目してください

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


以上がPHP を使用して URL アドレスパラメータを暗号化して送信し、Web サイトのセキュリティを向上させる方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。