接口对接安全性方案

鉴权(authentication)是指验证用户是否拥有访问系统的权利。

  1. 建立访问IP白名单 可以在nginx上配置只允许某些固定IP可以访问 或者 在阿里云的服务器上直接配置IP白名单

  2. 请求header带token令牌方式,授权调用API

  3. 采用签名方式

    签名是算法约定一个盐,通过这个算法把原文和盐加在一起,然后提取他们的摘要作为签名,一般是不可逆的过程。别人得到签名和盐是没用的,因为无法解密。通过签名认证的方式是,两者都通过一样的算法和约定好的盐,提取出摘要,然后比对这两个摘要是否一致来完成验证。

    a + yan -> 摘要算法 -> b

    a + yan -> 摘要算法 -> b

    如果 b==b, 则(基本上)可以认为 a=a, 完成验证。

  4. 敏感数据或参数采用密钥进行加密和解密

  5. API数据合法性校验

  6. 时间戳超时机制、过载保护机制,防止重复调用和攻击

接口具体加密方式

  1. 接口参数加密 可以采用AES对称加密,对接双方约定好秘钥进行对接
  2. 接口参数加密+时间戳 在参数加密时加上时间戳参数,这样根据时间戳跑判断接口的失效时间
  3. 接口参数加密+时间戳+不同来源的密钥 多个项目同时对接某个项目时,我们可以根据不同的项目设置不同的密钥,如果其中一个对接项目出现密钥泄露的情况,不会影响其他项目的调用

系统级别的安全性方案

  1. 在业务场景情况下,业务侧的风险威胁主要分两种:黑客攻击和业务人员自身的访问。

    • 面对黑客攻击,web应用防火墙(WAF)可实现90%拦截,剩下的SQL注入就需要数据库防火墙进行拦截。
    • 面对业务人员的防控,因为业务人员往往是合法身份、合法行为,这个时候需要通过数据访问行为建模发现意图的特征。还有一种是针对数据下载数量进行策略设置,防止批量下载。
    • Web应用防火墙(Web Application Firewall,简称 WAF)基于云安全大数据能力,用于防御SQL注入、XSS跨站脚本、常见Web服务器插件漏洞、木马上传、非授权核心资源访问等OWASP常见攻击,并过滤海量恶意CC攻击,避免您的网站资产数据泄露,保障网站的安全与可用性。
    • 云数据库防火墙(简称DBFirewall-Encloud)能够实时监控云上的数据库活动,使用全面的访问控制,防止来自内部和外部对数据的攻击,是保护数据库安全的最后一道防线。
  2. 永远不要相信用户的输入数据,一定要对表单数据进行过滤处理。

  3. 使用阿里云的 DDOoS 高防,预防接口攻击

    阿里云DDoS防护服务是以阿里云覆盖全球的DDoS防护网络为基础,结合阿里巴巴自研的DDoS攻击检测和智能防护体系,向您提供可管理的DDoS防护服务,自动快速的缓解网络攻击对业务造成的延迟增加,访问受限,业务中断等影响,从而减少业务损失,降低潜在DDoS攻击风险。

接口通讯规范示例

  • 签名规则:

    1
    2
    3
    4
    5
    6
    7
    
    // 签名有效期暂定为 600 秒
    var platform = "xxxx"       // 平台,正式测试环境保持一致
    var secret = "test_123456"   // 测试环境密钥
    var requestTime = 1640163102 // 秒级时间戳
    
    // 生成签名
    sign := Md5(fmt.Sprintf("%d-%s-%s", requestTime, platform, secret))
    
  • 数据规范

    • 数据类型规范

      • 字段约定返回 int 型,则不能返回 string 等其他类型,其他类型同理
      • 字段约定返回 array ,如果为空则需返回[]
      • 字段约定返回 object,如果为空则需返回null
    • 接口请求规范:

      • header头必带参数
      • 请求参数传递使用 json body 的方式
      header参数 数据类型 参数说明 补充说明
      api-sign string 签名串
      api-time int 秒级时间戳
    • 数据响应规范

      响应参数 数据类型 参数说明 补充说明
      code int 响应状态码:0-接口响应成功,1-接口请求失败直接报错,2-签名无效 http状态码:0-返回200,1-返回400,500 等,2-返回401
      message string 结果提示信息
      data object array 响应内容