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
——————————————————————//////——欢迎光临,请多指教!可加QQ:349017128进行交流——//////——————————————————————