1. 程式人生 > >對get方式的引數,如何添加簽名,防止資料被篡改或洩露

對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

注意金鑰需要在做好保密,他是保證資料不被篡改的核心依據