分享如何使用PHP将URL地址参数进行加密传输提高网站安全性

分享如何使用PHP将URL地址参数进行加密传输提高网站安全性

大家在使用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

发评论

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


  

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

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 会员注册 | 产品答疑

新浪公司 版权所有

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/113898.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 实体list转JSONArray对Date数据处理「建议收藏」

    实体list转JSONArray对Date数据处理「建议收藏」直接上代码importnet.sf.json.JSONArray;importnet.sf.json.JsonConfig;importnet.sf.json.processors.JsonValueProcessor;importjava.math.BigDecimal;importjava.text.SimpleDateFormat;importjava.util.ArrayList;importjava.util.Date;importjava.util.List;

    2022年6月24日
  • PHP二维数组(或任意维数组)转换成一维数组的方法汇总(实用)

    PHP二维数组(或任意维数组)转换成一维数组的方法汇总(实用)

    2021年11月8日
  • PHPstrom 2021.2激活码破解方法[通俗易懂]

    PHPstrom 2021.2激活码破解方法,https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月14日
  • DO-218AB封装,SM8T系列,SM8S系列加强版,汽车级TVS二极管

    DO-218AB封装,SM8T系列,SM8S系列加强版,汽车级TVS二极管TVS二极管SM8S系列的升级版SM8T系列上市了。关于SM8T系列单向TVS二极管,您知道多少呢?SM8T系列TVS二极管,相对于SM8S系列而言,可靠性更高、稳定性更强、低漏电流、更出色的钳位能力、低正向压降,符合AEC-Q101认证标准,并可通过ISO7637-25a/5b和ISO16750-25a/5b抛负载测。SM8T系列TVS二极管上市以来,深受广大新老客户的青睐和支持。SM8T系列TVS二极管主要用于敏感电子设备、感应负载开关和照明引起的瞬态电压保护,特别适用于汽车抛负载保护应用。

    2022年9月23日
  • 常见的测试用例设计方法有哪些呢?「建议收藏」

    常见的测试用例设计方法有哪些呢?「建议收藏」知乎问题:常见的测试用例设计方法有哪些呢?有什么比较好的基础理论书籍推荐吗? [我的回答]2018年8月25日测试用例设计技术和方法,其目的是为了解决测试分析与设计过程中碰到的问题,纯粹的理论只是应用技术和方法的基础,但不是目的。测试用例分析与设计过程,需要我们不断的应用结构化思维、发散性思维和可视化思维,以构建系统化的测试分析与设计框架。 我将2011年写的《软件测试设计…

    2022年6月23日
  • 睿智的目标检测23——Pytorch搭建SSD目标检测平台

    睿智的目标检测23——Pytorch搭建SSD目标检测平台睿智的目标检测23——Pytorch搭建SSD目标检测平台学习前言什么是SSD目标检测算法源码下载SSD实现思路一、预测部分1、主干网络介绍2、从特征获取预测结果3、预测结果的解码4、在原图上进行绘制二、训练部分1、真实框的处理2、利用处理完的真实框与对应图片的预测结果计算loss训练自己的ssd模型学习前言一起来看看SSD的Pytorch实现吧,顺便训练一下自己的数据。什么是SSD目标检…

    2022年6月15日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号