深圳最好的网站建设公司,wordpress templates,公司网站建设费计入什么费用,网站建设对企业带来什么作用使用场景
现在越来越多的项目使用的前后端分离的模式进行开发#xff0c;后端开发人员使用API接口传递数据给到前端开发进行处理展示#xff0c;在一些比较重要的修改数据接口#xff0c;涉及金钱#xff0c;用户信息等修改的接口如果不做防护验证#xff0c;经常容易被人…使用场景
现在越来越多的项目使用的前后端分离的模式进行开发后端开发人员使用API接口传递数据给到前端开发进行处理展示在一些比较重要的修改数据接口涉及金钱用户信息等修改的接口如果不做防护验证经常容易被人恶意刷接口导致巨大的损失。
API签名验证
这里我们引入业内比较通用的签名验证来对接口进行参数加密有以下优势。 请求的唯一性计算出的签名是唯一的可以用来验证。 参数的可变性参数中包含时间戳参数这就保证每次的请求计算出得签名都是不一样的。 请求的时效由于请求中带有当前发起请求的时间戳参数服务端可以对时间戳进行验证过滤超出时效的请求。 安全性即使请求被人恶意抓包对方恶意篡改其中的参数那么签名都是错误的参数无法修改。
实践出真理
1. 对map类型即一组键值对的待签名数据根据键的大小进行排序。map中各参数按字母顺序排序,如果第一个字母相同,按第二个字母排序,依次类推。例如
{timestamp: 2017-06-08 09:38:00,format: xml,app_id: aabbc,cp_extend_info: ,sign_type: HMAC-SHA1,sign: abc
}
那么排序后变成
{app_id: aabbc,cp_extend_info: ,format: xml,sign_type: HMAC-SHA1,timestamp: 2017-06-08 09:38:00
}
注意如果map中包含签名的参数(sign)需要过滤该参数的键值不参与签名没有值的参数请不要参与签名
2. 对排序后的map进行序列化处理成待签名字符串拼接后的待签名字符串为 1 app_idaabbcformatxmlsign_typeHMAC-SHA1timestamp2017-06-08 09:38:00
3. 根据HMAC-SHA1算法使用密钥提取待签名字符串的摘要hash签名并进行base64_encode编码便于显性传输和对比假设签名密钥为 test 则提取出的摘要签名并进行base64_encode的值为 1 JqoEqPIVVor0eyRHMYiZftsycVo 注意由于有些数据根据HTTP协议需求,在网络传输过程中需要进行URLencoding,这样接收方才可以接收到正确的参数,但如果这个参数参与签名,那么待签名字符串必须是字符串原值而非URLencoding 的值。 代码实践
PHP示例
/*** 使用密钥生成HMAC-Sha1签名* param array $params 请求参数* param string $signKey 签名密钥* return string*/
function hmacSha1Sign($params,$signKey)
{ksort($params);$paramString ;foreach ($params as $key $value) {if (is_null($value) || $value || $key sign) {continue;}$paramString . $key..$value.;}$paramString substr($paramString,0,-1);$sign base64_encode(hash_hmac(sha1, $paramString, $signKey, $raw_outputTRUE));return $sign;
}
以上就是日常开发中常用的API验证签名方式很简单又非常使用欢迎关注获取更多的教程。