h5+api接口安全和加强接口接收数据的安全性

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' => '<span style="color:red;font-weight: bold">' . $error . '</span>',
        );

    }

    # 关闭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

传给接口的字符串是否一样,如果验证一样证明签名一样,可以调用接口。增加签名后,风险还是有的,就是

签名算法被泄露,造成接口的不安全,所以要增加鉴权。

扫描二维码关注公众号,回复: 2421540 查看本文章

三、增加鉴权

鉴权就是接口给的权限,鉴权验证是否能调用该接口。

   举一个例子,

    我的接口这边

    '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拼接到需要传的数组中
在接口安全性上,把上面的三个验证加上,我们的接口算是比较安全了。

猜你喜欢

转载自blog.csdn.net/ltjy_admin/article/details/80429342
今日推荐