• api接口安全


    API接口安全

    在做app开发中,如何保证api的接口安全,不被其他app去调用?

    接口安全的措施很多,今天记录一个常用的措施 签名:

    前台想要调用接口,需要使用几个参数生成签名:

    时间戳:当前时间
    随机数:随机生成的随机数
    口令:前后台开发时,一个双方都知道的标识,相当于暗号
    算法规则:商定好的运算规则,上面三个参数可以利用算法规则生成一个签名。
    前台生成一个签名,当需要访问接口的时候,把时间戳,随机数,签名通过URL传递到后台。后台拿到时间戳,随机数后,通过一样的算法规则计算出签名,然后和传递过来的签名进行对比,一样的话,返回数据。

    算法规则:(可以自己定义,但是确保双端使用一样的算法)

    时间戳,随机数,口令按照首字母大小写顺序排序
    然后拼接成字符串
    进行sha1加密
    再进行MD5加密
    转换成大写

    简单实现:

    class Test{
        const TOKEN = "token";
        //随机生成字符串
        private function createNonceStr($length = 8) {
            $chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
            $str = "";
            for ($i = 0; $i < $length; $i++) {
                $str .= substr($chars, mt_rand(0, strlen($chars) - 1), 1);
            }
            return "z".$str;
        }   
    
    
    
       /**
         * @param $timeStamp 时间戳
         * @param $randomStr 随机字符串
         * @return string 返回签名
         */
        private function arithmetic($timeStamp,$randomStr){
            $arr['timeStamp'] = $timeStamp;
            $arr['randomStr'] = $randomStr;
            $arr['token'] = self::TOKEN;
            //按照首字母大小写顺序排序
            sort($arr,SORT_STRING);
            //拼接成字符串
            $str = implode($arr);
            //进行加密
            $signature = sha1($str);
            $signature = md5($signature);
            //转换成大写
            $signature = strtoupper($signature);
            return $signature;
        }     
    
    }

     服务端在接收到前段请求时,先进性签名认证,如果在服务端生成的signature与客户端传过来的signature不一致,则返回错误,拒绝请求!

  • 相关阅读:
    JS中Text节点总结
    JS中Document节点总结
    HTML5 Geolocation位置信息定位总结
    HTML5form表单的相关知识总结
    HTML5文档的各个组成部分分类
    JS中Node节点总结
    vue.js指令总结
    javascript string对象方法总结
    php 接口文档自动生产方式
    python使用
  • 原文地址:https://www.cnblogs.com/loveing/p/12774046.html
Copyright © 2020-2023  润新知