API接口数据安全解决方案-sign

由于接口地址的暴露,导致数据的丢失,所以必须做一些信息验证,所以添加授权码sign是一个很好的解决方法,话不多说,直接开干!
加密解密算法是需要服务端验证通过后将加密解密方案告知客户端。
我这里介绍对header头中的信息(version,app_type等)字段进行AES加密,最后在进行sign有效期验证,以及唯一性验证。

操作步骤

  1. 客户端生成sign,在http请求传值sign,app_tyoe,version
    通过http_build_query生成url_encoded字符串。
    这里data数组模拟为客户端发送过来的数据
    $data = [
    	'sign' => '1213313132',
    	'app_type' => 'ios',
    	'version' => 1.1
    ];
    $str = http_build_query($data);
    $sign = (new Aes())->encrypt(); //通过Aes加密算法得到sign   // 这里aes类通过网上可以得到
    http请求将sign,app_tyoe,version值传递到服务端。
    
  2. 服务端进行sign验证
    服务端通过约定的方法进行对应的AES解密
    $header 为header头中的数据(array)。
    $sign = $header['sign];
    $str = (new Aes())->decrypt(); // 通过Aes解密算法得到url_ecoded字符串
    parse_str($str, $arr);
    // 对sign进行验证
    if($arr['app_type']!= $header['app_type] || $arr['version']!= $header['version]){
    	return false; //表示 sign验证不合法
    }else{
    	return true;//表示sign验证合法
    }
    
  3. 可以对sign进行有效期验证以及唯一性验证
    客户端在header头信息中添加时间戳信息
    $data = [
    	'sign' => '1213313132',
    	'app_type' => 'ios',
    	'version' => 1.1,
    	'time' => '1568778577',
    ];
    
    服务端对时间进行验证,如果超过预订的有效期,则终止http请求
    if(time()-$arr['time]>600){	//如果超过10分钟,则终止请求
    	return false; //表示请求超时
    }else{
    	return true;//表示请求未超时
    }
    
    进行唯一性验证:对sign唯一性,可以通过缓存文件、mysql、redis保存,这里我使用文件进行缓存
    在进行sign验证之前进行减产缓存文件是否存在,存在,则sign失效,不存在,则进行之后的验证,并生成缓存文件。

相关连接:APP登录之access_token详解

结论

我这里只进行了简单的方法讲解,在实际过程中需要完善和验证的信息仍需要很多。

如果您对这个文章有任何异议,那么请在文章评论处写上你的评论。
愿大家都能在编程这条路,越走越远。

朋友不是玻璃做的,有许多人总是把朋友当做玻璃,小心翼翼的怕碰坏了。有时候,明明对朋友很不满,却不敢表达出来,害怕一旦表达不满,就会发生冲突;一旦发生冲突,就会伤害感情;一旦伤害感情,就失去这个朋友。真正的朋友不是玻璃做的,如果朋友真的像玻璃一样不许你碰,这样的朋友破了就破了吧。

发布了39 篇原创文章 · 获赞 40 · 访问量 4979

猜你喜欢

转载自blog.csdn.net/a1224645904/article/details/100976511