系统设计 十月 07, 2020

前后端分离 , 如何保证接口安全性 ?

文章字数 1.4k 阅读约需 1 mins. 阅读次数 12530

服务端

  1. HTTP 请求中的来源识别

  2. 数据加密

    采用https协议,保障数据传输过程中的安全

  3. 数据签名

    将要提交的数据,通过某种方式组合成一个字符串,然后通过 MD5 算法生成一个签名。如果觉得单纯的 MD5 不够安全的话,还可以在 MD5 的时候加盐和加 hash 。

  4. 时间戳

    在参数中加上当前请求的时间戳,服务端拿到这个请求后会拿当前的时间和请求中的时间做比较,比如在 5 分钟之内的才会流转到后面的业务处理,在 5 分钟以外的直接返回错误码。时间戳机制主要用来应对攻击者直接拿包进行非法的 DDOS 攻击。

  5. AppID/Token

    服务端为了验证合法的调用用户,可以添加一个 AppID,或者给登录用户设置token。

  6. 参数整体加密

    采用对称加密或者公开密钥算法对请求做一次整体加密,防止在浏览器的 network 中进行抓包。具体做法为:

    • 前端生成随机数作为签名key,用于对请求数据进行对称加密
    • 前端使用RSA的公钥对key进行加密
    • 将公钥作为头传递给服务器
  7. 限流

    服务端针对接口进行限流,限流的算法常见的有这么几种:令牌桶限流、漏桶限流、计数器限流。

  8. 黑名单

客户端

  1. 压缩

    代码压缩,去除 JavaScript 代码中不必要的空格、换行等内容,把一些可能公用的代码进行处理实现共享,最后输出的结果都压缩为一行或者几行内容,降低代码可读性。

  2. 混淆

    JavaScript 混淆器大致有两种:通过正则替换实现的混淆器、通过语法树替换实现的混淆器。

  3. 加密

    将一些核心逻辑使用诸如 C/C++ 语言来编写,并通过 JavaScript 调用执行,从而起到二进制级别的防护作用。其加密的方式现在有 Emscripten 和 WebAssembly 等。

0%