Maison >développement back-end >tutoriel php >Comment utiliser PHP pour crypter et transmettre les paramètres d'adresse URL afin d'améliorer la sécurité du site Web
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 |
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 |
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('&',$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
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!