php数据接口安全设计

接口的安全性主要围绕Token、Timestamp和Sign三个机制展开设计,保证接口的数据不会被篡改和重复调用,下面具体来看:

(1)Token授权机制:(Token是客户端访问服务端的凭证)–用户使用用户名密码登录后服务器给客户端返回一个Token(通常是UUID),并将Token-UserId以键值对的形式存放在缓存服务器中。服务端接收到请求后进行Token验证,如果Token不存在,说明请求无效。

(2)时间戳超时机制:(签名机制保证了数据不会被篡改)用户每次请求都带上当前时间的时间戳timestamp,服务端接收到timestamp后跟当前时间进行比对,如果时间差大于一定时间(比如5分钟),则认为该请求失效。时间戳超时机制是防御DOS攻击的有效手段。

(3)签名机制:将 Token 和 时间戳 加上其他请求参数再用MD5或SHA-1算法(可根据情况加点盐)加密,加密后的数据就是本次请求的签名sign,服务端接收到请求后以同样的算法得到签名,并跟当前的签名进行比对,如果不一样,说明参数被更改过,直接返回错误标识。

一. url请求的参数包括:timestamp,token, username,sign

  1. timestamp:

    时间戮
    
  2. token:

    登陆验证时,验证成功后,生成唯一的token(可以为uuid),并把token储存到缓存(redis)里 ,键为username,值为token

  3. username:

    用户名,保证唯一

  4. sign:

     规则:参数timestamp,token,username按字典排序,md5加密码(加点盐),后大写
    
    用户登陆,验证成功后,生成sign
    

二. url 拦截规则,验证

  1. 用户登陆,验证成功后,生成token,缓存(username->token)并返回给客户端

  2. 客户端每个接口请求(除登陆接口)时,传必要的参数timestamp,token,username, sign,没传直接返回报错

  3. timestamp作用:是否在有效期内,有效期可以设置10,20分钟,根据需求设定

    比如说 过期时间设置为10分 服务接受到请求的当前时间戳是30,传过来的timestamp时间戳是10,30-10>10, 说明这个请求过期

  4. token作用:直接与redis中的username键值 对比,如果不相等,则过期,或如果redis缓存时间过期了,也过期

  5. sign作用:根据规则传过来的参数,生成sign,与传过来的sign对比。如果不相等,报错

1.Http接口安全概述:

   1.1、Http接口是互联网各系统之间对接的重要方式之一,使用http接口,开发和调用都很方便,也是被大量采用的方式,它可以让不同系统之间实现数据的交换和共享,但由于http接口开放在互联网上,那么我们就需要有一定的安全措施来保证不能是随随便便就可以调用;

   1.2、目前国内互联网公司主要采用两种做法实现接口的安全:

            一种是以支付宝等支付公司为代表的私钥公钥签名验证机制;

            一种是大量互联网企业都常采用的参数签名验证机制;
  1. Http接口安全演进:

      2.1.完全开放的接口(完全开放)
    
      2.2.接口参数签名(基本安全)
    
      2.3.接口参数签名+时效性验证(更加安全)
    
      2.4.接口参数私钥签名公钥验签(固若金汤)
    
      2.5.接口参数签名+Https(金钟罩)
    
      2.6.口参数私钥签名公钥验签+Https(金钟罩)
    
      总之:安全是相对的,只有相对的安全,没有绝对的安全!
    

3.Http接口安全设计及应用

     3.1 接口参数私钥签名公钥验签

先来看看私钥+公钥的安全模式,这是一种更为安全的方式,它通过私钥和公钥实现接口的安全,目前互联网中主要是以支付宝

为代表的公司采用这种机制;(有很多开放平台也是采用这种机制) . 具体业务流所示:

该签名是通过4个秘钥来实现的,分别是:

客户端应用私钥 , 客户端公钥 , 服务端应用私钥 , 服务端公钥.

私钥都是用来生成签名的,公钥都是用来解密的,客户端的公钥解密客户端的私钥生成的签名,服务端的公钥解密服务端的私钥生

成的签名,相信这样解释应该会比较好理解的.

    好了,下面就来看看是如何具体操作的,我的具体操作步骤:

    首先,4把密钥都是通过OpenSSL工具生成,你需要先获得这个工具:官方网站:https://www.openssl.org/

    介绍一下这个工具吧,OpenSSL 是一个开源的安全套接字层密码库,囊括主要的密码算法、常用的密钥和证书封装管理功能及SSL协议,并提供丰富的应用程序测试或其它目的使用;OpenSSL整个软件包大概可以分成三个主要的功能部分:SSL协议库、应用程序以及密码算法库;

php接口安全浅谈:https://www.cnblogs.com/zouke1220/p/9394356.html
Laravel Repository (仓库模式) https://www.cnblogs.com/Stone–world/p/4756043.html
sql注入的防范:https://www.cnblogs.com/wanzhongjun/p/6406268.html
sql注入理解:https://www.cnblogs.com/LyShark/p/9837441.html
sql注入案例

https://blog.csdn.net/weixin_43772728/article/details/88649652
https://blog.csdn.net/qq_32261191/article/details/80553276
https://cloud.tencent.com/developer/news/92143
tp5 api 实现:http://www.thinkphp.cn/topic/51996.html
原生js实现简单JSONP:https://www.cnblogs.com/cryRoom/p/8418961.html
JSONP工作原理:http://baijiahao.baidu.com/s?id=1596094573722602418&wfr=spider&for=pc&qq-pf-to=pcqq.group

从逻辑层理解MYSQL数据库:https://blog.csdn.net/chenshun123/article/details/79677037
mysql缓存机制:https://blog.csdn.net/qzqanzc/article/details/80418125
mysql结构:https://www.cnblogs.com/itbsl/p/9957898.html
redis 主从原理:https://www.cnblogs.com/kevingrace/p/5685332.html
tp5 curl:类库使用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值