這篇文章介紹的內容是關於如何使用PHP將URL位址參數進行加密傳輸提高網站安全性,有著一定的參考價值,現在分享給大家,有需要的朋友可以參考一下
大家在使用PHP進行GET或POST提交資料時,常常會在URL帶著參數傳遞,例如www.mdaima.com/get.php?id=1&page=5,這裡就將id編號和page頁碼進行了參數傳遞,如果這樣直接明文傳輸,會將參數直接暴露給用戶,如果是比較重要的數據這樣傳輸我覺得還是不太安全。那如果將參數變成下面這樣,是不是會好一點呢?
1 |
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規則設定?
1 | RewriteRule ^get.html$ get_mb.php?&%{QUERY_STRING} #.htaccess伪静态规则的设置(加入到.htaccess里就行) 登入後複製 |
利用加密再配合伪静态设置,最终效果就是下面这样了,即隐藏了真实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('&',$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参数了,大家试一下吧,有问题也可以联系我!
转载出处:http://www.mdaima.com/jingyan/36.html
以上是如何使用PHP將URL位址參數進行加密傳輸提高網站安全性的詳細內容。更多資訊請關注PHP中文網其他相關文章!