api接口安全通俗易懂的意思就是保证接口接收到的数据不是被篡改的,防止信息泄露造成损失。
那如何要加强接口的安全性呢?
一、数据加密
把h5生成的数据加密(我用的是对称加密,加密还有非对称加密),第三方加密类放到tp5框架下的extend文件夹下(我是用tp5框架做的,就以tp5框架举例了^_^),用第三方类要配好命名空间哦,加密算法可以看看这个https://blog.csdn.net/shenggaofei/article/details/52333687,通过
请求方法
function CurlPost($url, $param = null, $timeout = 10)
{
//初始化curl
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url); // 设置请求的路径
curl_setopt($curl, CURLOPT_POST, 1); //设置POST提交
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); //显示输出结果
curl_setopt($curl, CURLOPT_TIMEOUT, $timeout);
//提交数据
if (is_array($param)) {
curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query($param));
} else {
curl_setopt($curl, CURLOPT_POSTFIELDS, $param);
}
//执行请求
$data = $data_str = curl_exec($curl);
//处理错误
if ($error = curl_error($curl)) {
$log_data = array(
'url' => $url,
'param' => $param,
'error' => '' . $error . '',
);
}
# 关闭CURL
curl_close($curl);
//json数据转换为数组
$data = json_decode($data, true);
//api返回数据解密
$api_des = config('api.mcrypt');
if ($api_des['is_open']) {
$data1 = Des::decode($data, $api_des['key'], $api_des['iv']);
$des_str = json_decode($data1, true);
}
if (!is_array($des_str)) {
$des_str = $data_str;
}
return $des_str;
}
把数据传输到接口,接口接到数据后按照加密的方法反向解出数据来,如果h5端的加密key,iv值丢失,把api
中加密的key,iv值更改这样数据解密不了,知道key,iv值伪造数据请求接口,接口也不会把信息传出,那要
是key、iv值知道了,但是接口的key、iv值没有更改,这样不就造成数据泄露了? 所以只把数据加密还是不
够的,还要增加签名
二、增加签名
签名就是把数据按照自己设定的算法进行加密,也是把数据加密了,但是签名的加密是进行算法后,转化成
json字符串,把json字符串md5,md5要按理来说是不能破解的,但是也能破解,破解的难度大,相对安全性高
一点。
下面是一个签名的简单算法,
在api有同样的签名的算法,api接收的数据(api已经解密的数据)通过签名算法生成一个加密的字符串与h5
传给接口的字符串是否一样,如果验证一样证明签名一样,可以调用接口。增加签名后,风险还是有的,就是
签名算法被泄露,造成接口的不安全,所以要增加鉴权。
三、增加鉴权
鉴权就是接口给的权限,鉴权验证是否能调用该接口。
举一个例子,
我的接口这边
'api_allow_access'=>[
'123456' => '123456',
'123' => '123456'
], 有这样一个数组,我给h5的是 '123456' => ‘123456’,接收到的数据解密出来要验证是否
有app_id,如果没有,则验鉴失败,如果有验证是否在上面数组的key值中,没在数组的key值中,则验
鉴失败,在数组中取出对应的value值
我h5这边也有一个数组
'api_auth'=>[
'app_id' => '123456',
'app_secret' => '123456'
],要把这个数组里面的app_id拼接到需要传的数组中
在接口安全性上,把上面的三个验证加上,我们的接口算是比较安全了。
---------------------
作者:凌天军洋的程序人生
来源:CSDN
原文:https://blog.csdn.net/ltjy_admin/article/details/80429342
版权声明:本文为博主原创文章,转载请附上博文链接!