zoukankan      html  css  js  c++  java
  • 细说RESTful API安全之概述

    目前许多前后端应用都采取REST架构风格,前端应用和后端服务通过API进行数据交换。
    通过REST API在网络中进行数据交换时很容易被网络抓包,然后进行恶意批量调用,最终导致后端服务不堪负重而影响正常业务,甚至通过数据篡改制造大量垃圾数据。
    鉴于此,REST API的安全就变得非常重要!不考虑任何REST API安全防护的系统可能会受到如下攻击:

       ▇ 重放攻击,DoS/DDoS攻击,导致系统被大量恶意请求拖垮,影响正常业务
       ▇ 数据篡改,产生大量的垃圾数据
       ▇ 敏感数据被泄露
       ▇ APP被仿制

    所以,在设计REST API时需要解决授权访问,敏感数据泄露,数据篡改,重放攻击,DoS/DDoS攻击等一系列安全问题。

    1. 认证授权

    认证授权包含2个方面:
    (1)访问某个资源时必须携带用户身份信息,如:用户登录时返回用户access_token,访问资源时携带该参数。
    (2)验证用户是否具备访问某些资源的权限:访问资源时判断用户权限。

     

    2. 防止敏感数据泄露
    通常,敏感数据指用户名和密码信息,所谓敏感数据泄露包含2个方面:
    (1)密码信息不能以明文方式存储在数据库中,容易被恶意窃取。
    (2)用户名和密码参数不能以明文方式在网络上进行传递(对参数进行编码或者使用ssl加密传输)。

     

    3. 防止数据篡改
    通常可以使用MD5加密的方式对API参数进行签名,在服务器端通过校验签名结果来验证数据是否被修改。

     

    4. 防止重放攻击,DoS/DDoS攻击
    可以通过时间戳,请求序列号等方式在一定程度上防止大规模的重放攻击。
    实现方式不同,效率和难易程度上略有差异,需要根据业务系统实际需求选择合适的方式。

     

    5. 其他注意事项
     - API只曝露指定方法,如:POST,GET,PUT,DELETE。
     - 参数校验,如:根据HTTP消息头中的Accept字段检查是否存在必要的参数信息,甚至可以验证参数格式是否正确等。
     - 尽量使用SSL
     - 客户端JavaScript代码混淆(注:JavaScript代码混淆不能起到加密的作用,而是需要尽量将用户名和密码加密结果随机化,如:加入加密随机盐值等

    总结:
    安全是相对的,是否需要严格的API安全性设计需要根据应用本身的需求而定。
    安全保护也是多层次的,往往在API本身的安全防护的外围,还需要一些其他的安全保障。

     

    【参考】
    http://www.jianshu.com/p/d7c52d113a68 浅谈API安全设计
    http://www.jianshu.com/p/c6518a8f4040 API接口安全性设计
    http://blog.nsfocus.net/rest-api-design-safety/ REST API 安全设计指南

  • 相关阅读:
    多态性的理解
    类(三)——继承与多态
    类(二)——拷贝控制(浅拷贝,深拷贝,浅赋值,深赋值)
    类 (一) ——基本概念
    STL容器底层数据结构的实现
    异常处理
    C++实现单例模式
    类的成员函数的连续调用与返回值问题
    拷贝构造函数的参数为什么必须使用引用类型?拷贝赋值运算符的参数为什么也是引用类型?
    U盘装机教程
  • 原文地址:https://www.cnblogs.com/nuccch/p/6363005.html
Copyright © 2011-2022 走看看