前段时间独立作了几个平台的接入,譬如生活信息分类平台的订单接入、百度应用内搜索的社区内容接入。这里总结一下平台接入的相关事宜。php
签名验证是接入平台须要最早完成的工做。哪怕是本身系统的接口请求,或者是本身公司移动端的App请求网站接口也须要作好签名验证,防止跨域的攻击或者网络爬虫对系统形成意想不到的问题。算法
最简单的签名验证就是在请求的URL里加上一段特定的字符串。譬如你的接口地址在http://yourhost/index.php?controller=apilist&action=oneApi,你能够在URL末尾加上一个参数,好比说key=meiyouqianming
,而后在你的代码里验证一下是否存在参数key,其值是否是meiyouqianming
(没有签名)就行了。简直偷懒到家。json
另外有将平台提供的secret_key
与请求参数作hash_hmac运算生成一个签名字符串,而后一块儿传到服务器上。目标服务器从新作一次运算检查是否传来的签名与生成的签名是否相符,相符则验证经过。
写一段简单的代码演示一下api
<?php /** * 生成签名 */ function makeSign($params, $secret_key) { // 将参数拼接成字符串 $paramString = ''; foreach ($params as $key to $value) { $paramString .= $key . '=' . $value; } // 参数字符串与secret_key作hash_hmac运算 // 这里选用sha1算法 $sign = hash_hmac('sha1', $paramString, $secret_key); return $sign; } /** * 检查签名 */ function checkSign($params, $secret_key) { // 将参数内的sign提取,并销毁$params中的sign if (isset($params['sign'])) { $oldSign = $params['sign']; unset($params['sign']); } else { return false; } // 利用$params和$secret_key生成签名并检查 $newSign = makeSign($params, $secret_key); return $oldSign == $newSign; }
其实就是经过mcrypt
之类的拓展库,对请求参数进行加密,防止抓包获取请求参数。大体就是先将传参拼接成字符串,而后使用拓展库提供的方法将字符串加密,到目标服务器上对字符串解密获取请求参数。这块很少赘述,若是对传参安全有更高的要求,推荐使用这种方法。跨域
使用拓展库的缺点是,正式环境上最好不要装这么多的拓展,以避免影响服务器的运行速度(虽然如今服务器的性能都很是好)。并且遇到须要在开发或者部署中使用拓展库时,每每须要暂时停掉服务器,而后安装新的拓展,蛋疼。安全
和小公司作对接时,永远不要相信文档!永远不要相信文档!永远不要相信文档!请直接和对方的技术人员沟通。服务器
注意一下响应的格式和字符集,通常推荐在php代码前加一个header()
函数强制把页面转换成json格式或者xml格式的文档。不加header可能没事,可是你也不知道对方服务器会出现什么问题。网络
若是一时半会你的签名验证完成不了,好比对方技术人员不在,没法及时解决接入问题,赶忙去写别的代码。签名验证是小事情,完成KPI才比较重要。函数