php设计安全接口

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

(1)Token授权机制:用户登录后,返回一个token,并将tokenUserId以键值对的形式存放在缓存服务器中。每次进行 token 验证,如果token不存在,说明请求无效。

(2)时间戳超时机制:用户每次请求都带上当前时间的时间戳timestamp,服务端接收到timestamp后跟当前时间进行比对,如果时间差大于一定时间(比如5分钟),则认为该请求失效。时间戳超时机制是防御DOS攻击的有效手段。

(3)签名机制:token+时间戳+其他指定参数(比如版本号等)进行加密,加密后的数据就是本次请求的签名sign,请求时候带上 sign。因为服务端也得到了 token+时间戳+其他参数,服务端进行计算后进行对比,跟当前的传进来的签名 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

 

转载于:https://www.cnblogs.com/windyet/articles/10650759.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值