目前的情况下api被很多地方应用,随之而来的是api的安全性问题。

  我所认识到的安全性问题有以下几个方面:
  1、DDoS(拒绝服务攻击),接口被恶意调用,使真实的用户无法享受到正常畅通的服务。
      这个比较单纯,也比较容易处理,通过IP限制来做,并且辅以一些硬件设备应该就没问题了,同时服务器供应商也可以提供相应的服务。

  2、传输过程中数据被截获,http数据包是可以被截获到的,这一点我们无法防止,能做的只有使被截获到的数据对截获者来说无意义。
      这个问题要分成两种情况来说明,第一种情况,api站点采用了https,那么在网络中传输的数据就是被加密过的数据,这种数据截获者很难把他解密出来,所以可以保证数据的安全性。第二情况,api站点没有采用https,而是使用的普通的http,如果不加任何处理其实传输的数据是在裸奔,当然有些数据就是给截获者截获到也没有什么影响,但对于敏感的信息我们还是要想办法来处理下的,要么协商一种相同的加密方法,这样起到加密作用。另外请求时使用token不直接传以明文密码暴露的机会,同时最好是在传输前就把信息MD5一下,这样对用户的在网站上的安全性是有好处的。总的来说不使用https的传输是不安全的,有意义的敏感信息有可能会被截获到,建议在登录相关的接口有条件时一定使用https,如果使用http登录也一定要处理一下敏感信息,比如这样MD5(变形(MD5(原文))),这样即使被截获也可以保证截获人不能得到原文,也就保证了用户在其他网站上帐号的安全。

  3、伪造请求,在上一种情况的基础上,截获者可以利用截获到的数据发起伪造的请求,当然https不会有这个问题。
      解决这个问题的一个方法是,让请求成为一次性的或者说只能在短时间内有效,可以在参数中再加入一个签名(sign),签名是由时间戳加参数MD5构成的,这样可以在服务端验证其有效性与时效性,这个方法在他人不知道签名生成规则时是有效的。但是如果程序被反编译就可以比较容易的知道生成规则。更靠谱一点的话就在生成sign时增加key值(不过这对app并不是太适用,因为如果key改变就要更新app),不过这样还是躲不过反编译,于是防止反编译也是重要的一环了。另外的一个途径是保证数据确实是从真实的客户端发出来的,这个就要从token上想办法了,例如对比IP,但这种途径显得比较苍白无力同时有局限性(如第一次登录,同时IP在实际情况下发生变化也不应该被认为不合法)。还有可以在重要的操作时应用二次授权,这样可以降低风险。

附:

1、 传输中加上签名sign不是为了防止被截获,而是为了防止被篡改或发出伪造请求。

2、 数字签名是对所传输数据的散列后的摘要使用私钥加密得到的结果,
  数字签名使得接收方可以确认信息是可靠的,因为只有指定私钥加密的内容接收方才可以解密出来。
  对于指定的MD5结果,可以有方法找到多个文本与之对应。即单次单纯的MD5是不够安全的,可以通过MD5(变形(MD5(原文)))来解决这个问题。
3、 数字证书是由权威机构用自己的私钥加密服用提供方的公钥并搭载其他相关信息组成的。

4、 使用token是为了唯一标识用户,应该在数据库中维护这些数据,它应有的关联属性(用户ID、IP、到期时间、是否有效)

对于api安全性的思考的更多相关文章

  1. Web API核查表:设计、测试、发布API时需思考的43件事[转]

    Web API核查表:设计.测试.发布API时需思考的43件事   当设计.测试或发布一个新的Web API时,你是在一个原有的复杂系统上构建新的系统.那么至少,你也要建立在HTTP上,而HTTP则是 ...

  2. 分析RESTful API安全性及如何采取保护措施

    本文中讨论了API安全性和采用安全措施的重要性,如身份验证,API密钥,访问控制和输入验证. API设计的第一步是撰写接口文档 根据TechTarget(海外IT专业媒体)的定义,RESTful AP ...

  3. API网关在API安全性中的作用

    从单一应用程序切换到微服务时,客户端的行为不能与客户端具有该应用程序的一个入口点的行为相同.简单来说就是微服务上的某一部分功能与单独实现该应用程序时存在不同. 目前在使用微服务时,客户端必须处理微服务 ...

  4. 【转】App开放接口api安全性—Token签名sign的设计与实现

    前言 在app开放接口api的设计中,避免不了的就是安全性问题,因为大多数接口涉及到用户的个人信息以及一些敏感的数据,所以对这些接口需要进行身份的认证,那么这就需要用户提供一些信息,比如用户名密码等, ...

  5. App开放接口api安全性的设计与实现

    前言 在app开放接口api的设计中,避免不了的就是安全性问题,因为大多数接口涉及到用户的个人信息以及一些敏感的数据,所以对这些接口需要进行身份的认证, 那么这就需要用户提供一些信息,比如用户名密码等 ...

  6. ASP.NET Web Api 安全性(转载)

    转载地址:http://www.cnblogs.com/fzrain/p/3552423.html 在Web Api中强制使用Https 我们可以在IIS级别配置整个Web Api来强制使用Https ...

  7. App开放接口api安全性—Token签名sign的设计与实现

    前言 在app开放接口api的设计中,避免不了的就是安全性问题,因为大多数接口涉及到用户的个人信息以及一些敏感的数据,所以对这些接口需要进行身份的认证,那么这就需要用户提供一些信息,比如用户名密码等, ...

  8. 基于api安全性的解决处理方案

    api解决用户安全主要采用两种方案: 一.使用token识别用户信息,作为识别用户的凭证 1.为什么使用token? 常规性的pc站点,使用session存储用户登录状态. 即用户登录之后,服务端会生 ...

  9. App开放接口API安全性 — Token签名sign的设计与实现

    在app开放接口API的设计中,避免不了的就是安全性问题. 一.https协议 对于一些敏感的API接口,需要使用https协议. https是在http超文本传输协议加入SSL层,它在网络间通信是加 ...

随机推荐

  1. 倍增实现LCA

    Today,we will talk about how to find The Least Common Ancestor. Now ,let us get into the business(正题 ...

  2. Gym-101615C-Fear Factoring(数论)

    分析 题意是求 L - R之间的数的因数和 我们知道如果对于一个数 i ( i < k = sqrt(R)),那么一定有一个数 R/i 也是R的因数 遍历 i = 2 - k,然后对于每一个 i ...

  3. 4. InnoDB表单独表空间

    4. InnoDB表单独表空间 从历史上看,所有InnoDB表和索引都存储在系统表空间中.这种单片方法的目标是完全专用于数据库处理的机器,精心规划的数据增长,其中任何分配给MySQL的磁盘存储都不会用 ...

  4. 【linux 06】 linux中的用户权限、文件权限与目录权限

    1.用户及用户组的概念: 1.文件所有者 2.用户组 3.用户 以root登录Linux之后,执行ls -al,会看到有关文件属性的信息 -rw-r--r--,第1个字符代表这个文件是“目录,文件或链 ...

  5. c++_分巧克力(75分)

    #include <iostream> using namespace std; int n,k; ],w[]; bool fen(int bian){ ; ;i<n;i++){ c ...

  6. 【HIHOCODER 1604】股票价格II(堆)

    描述 小Hi最近在关注股票,为了计算股票可能的盈利,他获取了一只股票最近N天的价格A1~AN. 在小Hi的策略中,每天可以在下列三种操作中选取一种: 1.什么也不做: 2.按照当天的价格买进一个单位的 ...

  7. .NET Core使用log4Net记录日志

    1.引入Nuget包 log4net 2.添加log4Net配置文件 <?xml version="1.0" encoding="utf-8" ?> ...

  8. 理解js的几个关键问题(1):全局变量new和关于hasOwnPropery和PropertyIsEnumerable 等

    一.作用域和全局变量 var test=function(){ var a=1; setTimeout(function(){ console.log(a); a=2; },1000); a=3; s ...

  9. 可以从CSS框架中借鉴到什么

    http://isux.tencent.com/css-framework.html http://isux.tencent.com/css-framework.html 现在很多人会使用 CSS 框 ...

  10. CI 安装时目录的安全处理

    如果你想通过隐藏 CodeIgniter 的文件位置来增加安全性,你可以将 system 和 application 目录修改为其他的名字,然后打开主目录下的 index.php 文件将 $syste ...