博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
分享如何使用PHP将URL地址参数进行加密传输提高网站安全性
阅读量:6680 次
发布时间:2019-06-25

本文共 2819 字,大约阅读时间需要 9 分钟。

大家在使用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>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
<</code>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
<</code>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
"form1" 
name=
"form1" 
method=
"post" 
action=
"?

0

阅读 收藏 喜欢
已投稿到:
sg_trans.gif
加载中,请稍候......
前一篇:
后一篇:
评论
评论加载中,请稍候...
发评论

登录名:密码: 记住登录状态

昵   称:

评论并转载此博文sg_trans.gif

以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

< 前一篇
后一篇 >
  

 不良信息反馈 电话:4006900000 提示音后按1键(按当地市话标准计费) 欢迎批评指正

| | | | | | | |

新浪公司

你可能感兴趣的文章
【民间图灵奖】读《图灵的秘密》写读后感获图灵水杯
查看>>
python 动态创建类
查看>>
推荐windows下两个科学用python集成套件
查看>>
objective-C Blocks 讲解
查看>>
EditPlus3.5+绿色+汉化+免安裝特别版
查看>>
java中的IO操作总结(四)
查看>>
【DLL】win7下注册dll
查看>>
为什么程序员的价值总是被严重的低估?
查看>>
design principle:模拟 android Button 控件点击事件
查看>>
SQL Server误区30日谈-Day21-数据损坏可以通过重启SQL Server来修复
查看>>
深入了解Hive Index具体实现
查看>>
一年又一年[2013开始了]
查看>>
C primer笔记
查看>>
Java多态之重写<一>
查看>>
android 问题汇总系列之八
查看>>
线程优先级
查看>>
【css】纯 css 制作带三角(border篇)
查看>>
MySQL数据库服务器优化详细
查看>>
Socket异步通信——使用SocketAsyncEventArgs
查看>>
alfresco_百度百科
查看>>