基于api安全性的解决处理方案

时间:2023-03-09 10:03:39
基于api安全性的解决处理方案

api解决用户安全主要采用两种方案:

一.使用token识别用户信息,作为识别用户的凭证

 1.为什么使用token?

  常规性的pc站点,使用session存储用户登录状态。

  即用户登录之后,服务端会生成一段加密后的数据(session id),存储在服务器内存中,并发送给浏览器,浏览器会把这段信息存储在cookie中。

  然后每次访问http请求时,会带上session id在头文件中,假如在服务器内存中存在此session id则通过认证,获取登录状态。(这个就是session原理)所以,当浏览器禁用cookie时,session是不能使用的。

  回到我们主题:

  为什么使用token呢

  a.token是无状态协议。token直接存储于数据库,服务器上不需要存储session信息

  b.客户端不需要存储cookie,防止 CSRF 通过 cookie攻击

  c.token更安全,为提交数据添加签名,防止数据在传输过程中被修改

 

二.使用sign签名加密算法,防止别人的恶意提交修改数据

1.以下是php创建签名代码。密钥与前端约定,保证安全性。

 /**
* @param $paramArr 参数
* @param $appSecret 密钥
* @return string
*
*/
private function createSign($paramArr,$appSecret){
ksort($paramArr);
reset($paramArr);
$sign = "";
foreach ($paramArr as $key => $val) {
if($key=='user' && $val=='app')continue;
if ($key != '') {
$sign .= $key . '=' . $val . '&';
}
}
$sign = md5($sign . $appSecret);
return $sign;
}

2.验证签名部分。

 private function check(){
if(!isset($_POST['sign']))self::error('数据校验失败',303);
$sign = $_PSOT['sign'];
unset($_POST['sign']);
if($sign!=$this->createSign($_POST,$this->key)){
self::error('数据校验失败',303);
}
return true;
}