php设计安全接口

一、设计:验证三个参数,分别为:Token、Timestamp和Sign

 

二、具体操作:

1、登录后,后端生成 token 并对应用户信息,然后返回 token 给 App。

2、每次请求数据,前端将所有参数加上 token 和 当前时间戳 timestamp, 组成 key=val&key=val 的形式的字符串,并按照签名算法进行加密生成 sign 值。

3、请求带上所有参数和 sign(不要 token,token 存在了后端了)。

4、后端按照一样的签名算法结算 sign,如果与前端传进来的一致,则说明未被篡改。

5、将 sign 存入 session,对比新 sign 和已经有的 sign,防止重复提交。

 

 

 

可以参考的 sign 设计:

/**
 * @param $arr 生成签名的参数
 * @param $urlencode
 * @return string 返回加密后的签名
 */
function get_sign($arr, $urlencode)
{
    $buff = "";
    //对传进来的数组参数里面的内容按照字母顺序排序,a在前面,z在最后(字典序)
    ksort($arr);
    foreach ($arr as $k => $v) {
        if (null != $v && "null" != $v && "sign" != $k) {    //签名不要转码
            if ($urlencode) {
                $v = urlencode($v);
            }
            $buff .= $k . "=" . $v . "&";
        }
    }
    // 去掉末尾符号“&”,则根据字母从小到大进行排序了。其实不用这个if,因为长度肯定大于0
    if (strlen($buff) > 0) {
        $stringA = substr($buff, 0, strlen($buff) - 1);
    }//签名加密并大写
    $sign = strtoupper(md5($stringA));
    return $sign;
}

 

 

微信官方安全算法:https://pay.weixin.qq.com/wiki/doc/api/native.php?chapter=4_3

 

posted @ 2019-04-03 18:34  小寒1206  阅读(155)  评论(0编辑  收藏  举报