对get方式的参数,如何添加签名,防止数据被篡改或泄露


例如查询用户id为1的个人信息,一般的URL为:http://www.mydomain.com/index.php?act=get_user_info&uid=1

这种情况下查询该用户的个人信息是没有问题的,当这个链接在没有用户登录的限制的状态下也可以查询显得很危险了,因为通过修改uid=1,就可以查询uid=2,uid=3的用户信息,这会导致系统的用户信息泄露,当然我只是用查询用户信息做个例子。


下面介绍下我的算法:

在url的参数后添加新的参数:signature

链接形式:http://www.mydomain.com/index.php?act=get_user_info&uid=1&signature=bfe279945c6109d067bcd295b5189d86


这个signature是如何生成的呢?

一般是参数进行有序排列

本例中:有两个参数act和uid,构建一个数组


$data = array();
$data['uid'] = 1;
$data['act'] = 'get_user_info';


对这个参数数组根据索引升序排列,然后按照key1=value1&key2=value2的方式拼接成一个字符串

①排序

Array
(
    [act] => get_user_info
    [uid] => 1
)

②拼接字符串

$str = "act=get_user_info&uid=1";

③计算签名


// $key 密钥
$signature = md5(md5($str).$key);

将此签名添加到$str后面,http://www.mydomain.com/index.php?act=get_user_info&uid=1&signature=bfe279945c6109d067bcd295b5189d86

注意密钥需要在做好保密,他是保证数据不被篡改的核心依据


你可能感兴趣的:(PHP)