在给第三方系统提供api时,我们需要注意下安全问题。

比较常见的接口有http接口。以http接口为例。我们需要注意的几点:

1.只有被允许的系统才可以调用api

2.如果http请求被截获。也不能随便修改接口中的参数。

 

在运维方面,可以添加访问白名单。白名单中有一系列的ip地址。只有白名单中的ip才可以访问api。但是这样会给运维造成麻烦。比如应用的ip可能会变化。

下面说下一种比较容易实现的api安全方案吧。

比如要让a系统访问我们的api接口。可以给a系统分配一个appName和一个appKey。

如:appName=app1.appKey是一个guid。

应用a调用我们的接口时,在参数中,除了接口必须的业务上的参数外,还需要提供一个appName参数,一个secretKey参数。appName就是分配的app1.secretKey是一种根据业务参数,appKey,由某种算法得出的值。

 

比如:得到appSecret的算法可以是:

业务参数+appName+appKey,再进行md5加密等。

http://localhost:8080/api/addUser?id=123&name=leo&password=hello1234&usertype=2

业务参数就是“id=123&name=leo&password=hello1234&usertype=2”

+appName=“id=123&name=leo&password=hello1234&usertype=2&appName=app1”

将上面的值+appKey,再进行md5加密等。

最终的url请求大致如下:

http://localhost:8080/api/addUser?id=123&name=leo&password=hello1234&usertype=2&appname=app1&appsecret=546rtf564thft456fth56jh54tfg5454gfhgf

服务端收到请求后,

根据appname,找到对应的appKey。

再根据算法,“addUser?id=123&name=leo&password=hello1234&usertype=2&appname=app1”+appKey,再进行md5加密,如果得到的=appsecret=546rtf564thft456fth56jh54tfg5454gfhgf

表明,该请求时被授权的。

只要a系统不将appName和appKey全部泄漏,别的系统就不能调用我们的api。

如果上面的url被截获了。那么第三方系统就可以发出这个请求了。因为他已经知道了url了,虽然他不知道我们的appkey。但是如果他想修改接口中的参数是不可以的。一旦,他修改了参数,appsecret就不对了,因为不知道appkey,在修改了参数后,也不知道对应的appsecret。

那,如果攻击者一直调用上面被截获的接口怎么办呢?很简单,在url中再添加一个当前时间戳。

即:appsecret变成:业务参数+appname+当前时间戳,在md5加密。

服务端接受到请求后,获得时间戳。如果时间戳和当前时间相隔很小,该请求时有效的。不然是无效的。

如果攻击者修改时间戳怎么办?如果修改了时间戳,appsecret就不对了。

所以,该方案的前提是应用的appName和appsecret不能全部泄漏。appname可能会泄漏。但是appkey决不能泄漏。

api的安全问题的更多相关文章

  1. duilib学习 --- 360demo 学习

    我想通过360demo的学习,大概就能把握duilib的一般用法,同时引申出一些普遍问题,和普遍解决方法.并在此分享一些链接和更多内容的深入学习..... 原谅我是一个菜鸟,什么都想知道得清清楚楚.. ...

  2. App架构经验总结(转)

    原文链接: http://keeganlee.me/post/architecture/20160303 架构因人而异,不同的架构师大多会有不同的看法:架构也因项目而异,不同的项目需求不同,相应的架构 ...

  3. App架构经验总结(转载)

    原文地址:http://www.iteye.com/news/31472 架构因人而异,不同的架构师大多会有不同的看法:架构也因项目而异,不同的项目需求不同,相应的架构也会不同.然而,有些东西还是通用 ...

  4. App架构经验总结

    作者:李纪钢,网名 Keegan小钢,博客地址:http://keeganlee.me.目前在广州日报新媒体有限公司,负责移动产品的研发工作. 关于:本文整理自CSDN架构主题月子活动金牌架构师微课堂 ...

  5. APP和服务端-架构设计(一)

    架构因人而异,不同的架构师大多会有不同的看法:架构也因项目而异,不同的项目需求不同,相应的架构也会不同.然而,有些东西还是通用的,是所有架构师都需要考虑的,也是所有项目都会有的需求,比如API如何设计 ...

  6. Service_Worker XSS

    0x00 简介 Service Worker 是 Chrome 团队提出和力推的一个 WEB API,用于给 web 应用提供高级的可持续的后台处理能力.该 WEB API 标准起草于 2013 年, ...

  7. node十年心酸史,带你了解大前端的由来!

    前言 近年来,随着前端的丰富,前后端分离是趋势.各种东西如雨后春笋一般,层出不穷.node.js的出现,使前端真正意义上变成了大前端. 前端由来之HTML发展史 1990 年,Tim Berners- ...

  8. Web API 安全问题

    目录 Web API 安全概览 安全隐患 1. 注入(Injection) 2. 无效认证和Session管理方式(Broken Authentication and Session Manageme ...

  9. 【JAVA8新的时间与日期 API】- 传统时间格式化的线程安全问题

    Java8之前的日期和时间API,存在一些问题,最重要的就是线程安全的问题.这些问题都在Java8中的日期和时间API中得到了解决,而且Java8中的日期和时间API更加强大. 传统时间格式化的线程安 ...

随机推荐

  1. Asp.Net实现FORM认证的一些使用技巧

    原文转发:http://www.cnblogs.com/Showshare/archive/2010/07/09/1772886.html 最近因为项目代码重构需要重新整理用户登录和权限控制的部分,现 ...

  2. oracle_根据表名拼装语句

    1.-----批量删除用户下所有表数据------保留表结构 eg: 批量删除用户下的所有表数据 SELECT 'TRUNCATE TALBE '||TABLE_NAME||';' FROM USER ...

  3. mac os x10.11.2系统eclipse无法读取环境变量的问题

    eclipse调试Android自动化脚本的时候一直无法找到adb,遇到这么坑的问题,折腾死了,记录一下. mac os x10.11.2系统GUI程序(eclipse)无法读取~/.bash_pro ...

  4. iOS开展 - 中国 iOS/Mac 开发博客列表

    博客地址 RSS地址 OneV's Den http://onevcat.com/atom.xml 破船之家 http://beyondvincent.com/atom.xml NSHipster h ...

  5. 被FusionCharts V3.4抛弃的东西

    从FusionCharts Suite XT V3.4開始,FusionCharts产品家族放弃了Flash,发展成为一个纯JavaScript的图表组件.前面我们介绍了怎样升级到V3.4,接下来让我 ...

  6. ios背景更新和下载

    ios背景更新和下载 by 吴雪莹 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NS ...

  7. SQL点滴6—“微软不认识闰年2月29日”&字符"N"的作用

    原文:SQL点滴6-"微软不认识闰年2月29日"&字符"N"的作用 http://www.cnbeta.com/articles/50580.htm这个 ...

  8. 学习使用简单的php

    配置文件在:/etc/php5/$中,不同的模式含有自己的php.ini配置文件.php可以运行于多种模式:cgi.fastcgi.cli.web模块模式等4种: 我现在使用的模式是cli模式,这里进 ...

  9. [译]Java 设计模式之工厂

    (文章翻译自Java Design Pattern: Factory) 1.Java工厂模式的来历 工厂设计模式用于创建基于不同参数的对象.下面的例子就是在一个工厂里创建一个人.如果我们向工厂要一个b ...

  10. HTML 5 在Web SQL 使用演示样本

    Web sql 这是一个模拟数据库浏览器.可以使用JS操作SQL完成数据读取和写入,但是这件事情并不多,现在支持的浏览器,而其W3C规格已经停止支持.外形似它的前景不是很亮. W3C 规范:http: ...