php开发api接口安全验证,开放api接口签名验证

  php开发api接口安全验证,开放api接口签名验证

  就安全性而言,客户端与服务器之间的所有通信内容都要通过加密通道(HTTPS)进行传输,明文HTTP通道将是中间人及其各种变种的温床。中间人攻击简单地说就是恶意黑客可以操纵客户端和服务器之间的明文通信通道。黑客可以监听通信内容,窃取机密信息,甚至篡改通信内容,但加密的通信内容理论上是无法破译的。

  URL签名生成规则

  API的有效访问URL包括以下三个部分:

  1.资源访问路径,如/v1/deal/find _ deals;

  2.请求参数:即API对应需要的参数名称和参数值param=value,多个请求参数通过一个连接如deal _ id=1-85462appid=00000连接;

  3.签名字符串,由签名算法生成。

  签名算法如下:

  1.按字典升序排列所有请求参数;

  2.将上面排序的参数表串起来,比如key1value1key2value2key3value3.keynvaluen

  3.app secret作为后缀,字符串进行SHA-1计算,转换成十六进制代码;

  4.签名字符串是在转换成全部大写形式后获得的。

  注意:请确保HTTP请求数据编码必须是UTF-8格式,并且URL也必须是UTF-8格式。

  例如:

  PHP服务器首先要给开发者分配一个appid和appsecret(正常情况下开发者要向服务提供商官网申请)。作为客户端,需要对官方发布的appid appsecret进行保密。

  Appid将作为应用标识符在请求中传递参与接口请求,appsecret将作为唯一不必要的参数传递,但它将是验证当前请求的关键参数,只有应用开发者和发布服务器知道。因为签名是用相同的算法加密的,所以应用端和服务器端可以计算出相同的签名值。签名的实际意义在于服务器端对客户端的访问认证。从某种意义上说,签名机制类似于用公钥方法签名,用每个应用对应的私钥值解密,但这个解密过程的本质是检查签名参数值的过程。

  假设分配:

  $ appid=5288971

  $ app secret= r5 e 2t 85t Yu 142 u 665698 fzu ;

  移动客户端需要请求服务列表(可以为java或sf等移动客户端编写以下代码)

  申请地址:http://web.com/server/list

  参数:

  $array=[

  appid=5288971,

  菜单=客户服务列表,

  lat=21.223,

  液化天然气=131.334

  ];

  //1.对加密数组进行字典排序。

  foreach($ array as $ key=$ value){ $ arr[$ key]=$ key;} sort($ arr);//字典排序的作用是防止后面的拼接加密因为参数顺序不一致而不一样。//2.拼接键和值$ str=“”;foreach ($arr as $k=$v) { $str=$str。$arr[$k]。$ array[$ v];} //3.用sha1加密,转换成大写//4。大写得到签名$restr=$str。$ appsecret$ sign=strtoupper(sha1($ restr));

  [纬度]=21.223

  [LNG]=131.334[sign]=c 096d 7811 e 944386 ce 880597 ba 334 a5 ab 640 b 088)

  {appid:5288971, menu : \ u5ba 2 \ u 6237 \ u670d \ u52a 1 \ u 5217 \ u 8868 , lat:21.223, lng:131.334, sign : c 096d 7811 e 944386 ce 880597 ba 334 a5ab 640 b 088 }

  $ Model=Model:find()-where( appid=:appid )-params([:appid =$ server array[ appid ])-one();

  if($ model){ $ server secret=$ model-app secret;}

  根据相同的字典排序和算法生成服务器的$sign,判断$sign是否相同。

  $ client sign=$ array[ sign ];

  unset($ server array[ sign ]);#生成服务器字符串$ serverstr=“”;foreach($ server array as $ k=$ v){ $ serverstr=$ str。$ k $ v;} $reserverstr=$str。$ serverSecret$ reserver sign=strtoupper(sha1($ reserver str));if($clientSign!=$reserverSign){ die(非法请求);}else{ //您的代码继续;}

  当短信登录只适用于手机app时,可以设置secret的过期时间。在SMS登录之后,保存appid(userid)和密钥。每当用户打开app时,首先连接互联网询问登录是否过期,然后通过短信登录获取新的秘密。

  附加:

  有时,我们使用hash_hmac进行加密(我们在项目中使用它……)

  函数makeSignature($args,$ key){ if(isset($ args[ sign ]){ $ old sign=$ args[ sign ];unset($ args[ sign ]);} else { $ old sign=} ksort($ args);$ request string=foreach($ args as $ k=$ v){ $请求字符串.=$k . = .urlencode($ v);} $newSign=hash_hmac(md5 ,strtolower($requestString),$ key);返回$ newSign}

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

相关文章阅读

  • 使用php连接mysql数据库,php连接数据库的方法
  • 使用php连接mysql数据库,php连接数据库的方法,一文详解PHP连接MySQL数据库的三种方式
  • 七种php开发环境搭建工具有哪些,七种php开发环境搭建工具包括
  • 七种php开发环境搭建工具有哪些,七种php开发环境搭建工具包括,七种PHP开发环境搭建工具
  • php高并发三种解决方法,php 高并发解决方案
  • php高并发三种解决方法,php 高并发解决方案,PHP解决高并发问题(opcache)
  • php邮件发送的两种方式区别,php邮件发送的两种方式是什么
  • php邮件发送的两种方式区别,php邮件发送的两种方式是什么,php邮件发送的两种方式
  • php跳转页面的几种实现方法详解图,php跳转页面的几种实现方法详解视频
  • php跳转页面的几种实现方法详解图,php跳转页面的几种实现方法详解视频,PHP跳转页面的几种实现方法详解
  • PHP购物车,php立即购买和购物车功能
  • PHP购物车,php立即购买和购物车功能,php实现购物车功能(上)
  • php读取pdf数据,php pdf读取
  • php读取pdf数据,php pdf读取,PHP中使用mpdf 导出PDF文件的实现方法
  • php网站判断用户是否是手机访问的方法有哪些,php如何判断用户是否登录
  • 留言与评论(共有 条评论)
       
    验证码: