• 浅谈API安全设计


    一、简述


    安全是恒久的话题,如果不注意防范,会带来很严重的后果。比如:

    1.接口被大规模调用消耗系统资源,影响系统的正常访问,甚至系统瘫痪

    2.数据泄露

    3.伪造(篡改)数据,制造垃圾数据

    4.App被仿制…

     那么我们设计API时,就要保证RESTful API的安全性,主要包括三大方面:

    a) 对受限资源的登录授权

    b) 对请求做身份认证,并且防止篡改,重放攻击

    c) 对敏感的数据做加密

     

    二、受限资源的登录授权

    此流程不是本文重点,不赘述,基本流程如下:

    1. 客户端提交账号信息(用户名+密码)到服务端

    2. 服务端验证成功,返回AccessToken给客户端存储

    3.访问受限资源时,客户端带入AccessToken就可访问。

     

    三、请求认证

    如果不对请求进行签名认证,那么可以简单的通过fiddler等工具轻易抓包拿到数据,并进行篡改,提交,大规模批量调用,则会使系统产生大量垃圾数据,系统资源被大量消耗,甚至无法正常使用(另说,当然可以通过GateWay进行限流),因而我们需要对请求进行签名认证。

            URL格式

            URL:schema://domain/path?query&imei&timestamp&sign

      

                                                                            参数说明

            签名方法

            sign=signature(path?query&imei×tamp&SIGN_KEY)

      

                                                                                               验证过程

    认证逻辑

        1、初始时,服务端存有各App版本的SIGN_KEY,客户端存有对应版本的SIGN_KEY

        2、当要发送请求之前,通过签名方法加密,得到一个sign

        3、发送请求的时候,连同sign一起发送给服务器端

        4、服务器端首先验证时间戳timestamp是否有效,比如是服务器时间戳5分钟之前的请求视为无效;

        5、然后取对应版本的SIGN_KEY验证sign是否合法

        6、为了防止重放攻击,需要检查sign是否在redis中存储,如不存在则存入redis(缓存5分钟)

    如何防止数据篡改

        这里通过签名参数中包含原有请求的所有参数,改动任意参数,sign值都会不同,因此无法篡改。

    如何防止重放攻击

        由于签名算法中还有imei(设备唯一Id)、timestamp参数,且签名算法为不可逆算法(如md5或sha1),因而对于正常的每个请求sign值不会重复。此时服务端可以存储5分钟的sign值,来做重放攻击时的验证过滤,超过5分钟的请求则直接被timestamp校验过滤。

    总结

        如此便实现了请求认证,防止数据篡改,重放攻击,但是需要确保App密钥(SIGN_KEY)的安全保存,其优点是容易理解与实现,缺点是需要承担安全保存密钥和定期更新密钥的负担。

    四、敏感据加密

        1)、部署SSL基础设施(即HTTPS),敏感数据的传输全部基于SSL。

        2)、仅对部分敏感数据做加密(例如账号+密码),并加入某种随机数作为加密盐,以防范数据被篡改。

    摘自:http://www.jianshu.com/p/d7c52d113a68

  • 相关阅读:
    DB2 for Z/os Statement prepare
    Foreign key (referential) constraints on DB2 LUW v105
    复制Informational constraints on LUW DB2 v105
    DB2 SQL Mixed data in character strings
    DB2 create partitioned table
    MVC中使用EF的技巧集(一)
    Asp.Net MVC 开发技巧(二)
    Linq使用技巧及查询示例(一)
    Asp.Net MVC 开发技巧(一)
    Asp.Net MVC Identity 2.2.1 使用技巧(八)
  • 原文地址:https://www.cnblogs.com/lilunjia/p/7891544.html
Copyright © 2020-2023  润新知