文档章节

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

j
 james_laughing
发布于 2016/10/28 16:23
字数 909
阅读 38
收藏 2

大家在使用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参数了,大家试一下吧,有问题也可以联系我!

转载请注明:分享如何使用PHP将URL地址参数进行加密传输提高网站安全性 | 码代码-李雷博客

本文转载自:http://blog.csdn.net/llf369477769/article/details/51837546

j
粉丝 29
博文 455
码字总数 22188
作品 0
广州
私信 提问
Web开发与运维安全浅见

Web开发与运维安全浅见 View more presentations from CFC4N CHEN 目录 前置知识 SQL注入 文件上传 XSS与SCRF 远程文件包含 URL跳转 权限认证 数据存储与暴力破解 文件解析 其他 前置知识 We...

鉴客
2011/10/19
1K
0
python web开发 了解基础点

python web开发 [if !supportLists]1-1 [endif]预期目标 技能:学习[Django] [Tornado] [Flask]web开发框架 经验:熟悉[门户网站在线电商管理平台、项目开发]开发流程和处理过程 总结:掌握[...

AAA年华
2018/01/10
0
0
REST API 安全设计指南

REST API 安全设计指南。REST的全称是REpresentational State Transfer,它利用传统Web特点,提出提出一个既适于客户端应用又适于服务端的应用的、统一架构,极大程度上统一及简化了网站架构...

gsying1474
2016/06/30
0
0
Java学习手册:Java网络编程面试问题

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 https://blog.csdn.net/MaybeForever/article/details/95471329 1、Java学习手册:Java基础知...

浩比浩比
08/27
0
0
iGO实现之路 —— Security

本文为转载,原文:iGO实现之路 —— Security Golang 介绍 在我们写代码的过程中,可能会遇到很多的数据安全问题。比如我们在后端进行http请求的时候,url编码问题;用户登录密码数据库的保...

ChainZhang
2018/01/23
0
0

没有更多内容

加载失败,请刷新页面

加载更多

如何快速为网站选择合适的SSL证书

随着HTTPS普及,越来越多用户开始采用SSL证书,来对HTTP进行加密,升级到HTTPS。但面对各种不同的SSL证书,用户应如何选择?安信SSL证书将为大家讲解: 一、按SSL证书类型选择 DV SSL证书:域...

安信证书
8分钟前
1
0
被嫌弃的eval和with

本文转载于:专业的前端网站➥被嫌弃的eval和with 前面的话   eval和with经常被嫌弃,好像它们的存在就是错误。在CSS中,表格被嫌弃,在网页中只是用表格来展示数据,而不是做布局,都可能被...

前端老手
11分钟前
1
0
Allegro非常实用的快捷键-PCB环境

立题简介: 内容:简单介绍Allegro绘制的PCB环境下的快捷键; 来源:实际使用得出; 作用:对Allegro绘制PCB快捷键进行介绍; PCB环境:Cadence 16.6; 立题详解: 对“allegro”板而言,其在...

demyar
18分钟前
1
0
润乾报表与 ActiveReport JS 功能对比

简介 润乾报表是用于报表制作的大型企业级报表软件,核心特点在于开创性地提出了非线性报表数学模型,采用了革命性的多源关联分片、不规则分组、自由格间运算、行列对称等技术,使得复杂报表...

泡泡糖儿
19分钟前
1
0
仿微信打飞机游戏网页版,基于cocos2d-js游戏引擎,在线试玩,内含源码

早几年研究cocos2d的demo项目,这个是基于cocos2d-js游戏引擎,整个游戏用js编写。 玩法:鼠标拖动飞机移动即可 试玩地址 源码地址 游戏截图: 文件说明 cocos2dx:游戏引擎 res:存放游戏素...

tanghc
22分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部