大家在使用PHP进行GET或POST提交数据时,经常会在URL带着参数进行传递,比如www.mdaima.com/get.php?id=1&page=5,这里就将id编号和page页码进行了参数传递,如果这样直接明文传输,会将参数直接暴露给用户,要是是比较重要的数据这样传输我觉得还是不太安全。那如果将参数变成下面这样,是不是会好点呢?
1
|
www.mdaima.com/get.php?VGsAYQ96VzkEaF08DTxTLQIyDmsBIQtnVj0Fe1ciAD0EN1M0X2MHMQYxDDcAOwI/XToBPVM5ADxfag== |
我们再加强一下,将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/XToBPVM5ADxfag== |
相比之下已经好一些了吧,至少看上去会好很多,那如何进行加密和解密呢?请看下面函数(不用细看,直接拿过去用就行了,重点看如果调用)
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 <</code>
{
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 <</code>
{
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 <</code>
{
$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
|
"form1" name= "form1" method= "post" action= "?
分享:
喜欢 0 赠金笔 加载中,请稍候......
前一篇:url加密,一般只对参数加密
后一篇:PHP编程效率的20个要点
< 前一篇url加密,一般只对参数加密
后一篇 >PHP编程效率的20个要点
新浪BLOG意见反馈留言板 不良信息反馈 电话:4006900000 提示音后按1键(按当地市话标准计费) 欢迎批评指正 新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 会员注册 | 产品答疑 Copyright © 1996 - 2017 SINA Corporation, All Rights Reserved 新浪公司 版权所有 |