api的安全问题
在给第三方系统提供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请求大致如下:
服务端收到请求后,
根据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的安全问题的更多相关文章
- duilib学习 --- 360demo 学习
我想通过360demo的学习,大概就能把握duilib的一般用法,同时引申出一些普遍问题,和普遍解决方法.并在此分享一些链接和更多内容的深入学习..... 原谅我是一个菜鸟,什么都想知道得清清楚楚.. ...
- App架构经验总结(转)
原文链接: http://keeganlee.me/post/architecture/20160303 架构因人而异,不同的架构师大多会有不同的看法:架构也因项目而异,不同的项目需求不同,相应的架构 ...
- App架构经验总结(转载)
原文地址:http://www.iteye.com/news/31472 架构因人而异,不同的架构师大多会有不同的看法:架构也因项目而异,不同的项目需求不同,相应的架构也会不同.然而,有些东西还是通用 ...
- App架构经验总结
作者:李纪钢,网名 Keegan小钢,博客地址:http://keeganlee.me.目前在广州日报新媒体有限公司,负责移动产品的研发工作. 关于:本文整理自CSDN架构主题月子活动金牌架构师微课堂 ...
- APP和服务端-架构设计(一)
架构因人而异,不同的架构师大多会有不同的看法:架构也因项目而异,不同的项目需求不同,相应的架构也会不同.然而,有些东西还是通用的,是所有架构师都需要考虑的,也是所有项目都会有的需求,比如API如何设计 ...
- Service_Worker XSS
0x00 简介 Service Worker 是 Chrome 团队提出和力推的一个 WEB API,用于给 web 应用提供高级的可持续的后台处理能力.该 WEB API 标准起草于 2013 年, ...
- node十年心酸史,带你了解大前端的由来!
前言 近年来,随着前端的丰富,前后端分离是趋势.各种东西如雨后春笋一般,层出不穷.node.js的出现,使前端真正意义上变成了大前端. 前端由来之HTML发展史 1990 年,Tim Berners- ...
- Web API 安全问题
目录 Web API 安全概览 安全隐患 1. 注入(Injection) 2. 无效认证和Session管理方式(Broken Authentication and Session Manageme ...
- 【JAVA8新的时间与日期 API】- 传统时间格式化的线程安全问题
Java8之前的日期和时间API,存在一些问题,最重要的就是线程安全的问题.这些问题都在Java8中的日期和时间API中得到了解决,而且Java8中的日期和时间API更加强大. 传统时间格式化的线程安 ...
随机推荐
- hdu 3068 最长回文(manachar模板)
Problem Description 给出一个只由小写英文字符a,b,c...y,z组成的字符串S,求S中最长回文串的长度.回文就是正反读都是一样的字符串,如aba, abba等 Input 输 ...
- Crazy Rows
Problem You are given an N x N matrix with 0 and 1 values. You can swap any two adjacent rows of the ...
- URAL 1404. Easy to Hack! (模拟)
space=1&num=1404">1404. Easy to Hack! Time limit: 1.0 second Memory limit: 64 MB When Vi ...
- Linux makefile 课程 非常具体的,和理解
最近的一项研究Linux根据C计划,我买了一个电话<Linux环境C编程指南>阅读makefile这使他看起来困惑,我可能无法理解. 于是google到了下面这篇文章. 通俗易懂. 然后把 ...
- C#二维码生成
C#二维码生成,这里使用开源的ThoughtWorks.QRCode.dll库. 1.下载ThoughtWorks.QRCode.dll库文件,并引用到项目中. 2.创建QRCodeHandler.c ...
- 完整详细的说明GCD列(一)dispatch_async;dispatch_sync;dispatch_async_f;dispatch_sync_f
为什么要写这个系列,由于百度了一下.我们正在寻找一个非常比较片面的Blog.抄来抄去,写作是很粗糙. 所以,我想写这个系列,尝试记录官方网站GCD强大的全功能的表达.为了方便他们,也方便他人,假设有发 ...
- bootstrap标准模板
<!DOCTYPE html><!--html5定义--> <html lang="en"> <head> <meta cha ...
- Microsoft dotnetConf 2015
Microsoft dotnetConf 2015 一些整理 dotnetConf 2015 直播计划: 第一天 (10 个主讲) - .NET Product Teams 主讲人为 .NET 产 ...
- 虚拟局域网(VLAN)组态
图1 实验拓扑图 实验内容: (一)分别把交换机命名为SWA,SWB. (二)划分虚拟局域网vlan,并静态地把port划分到valn中. 第一.使用两种方法划分vlan. l 在全局模式下划分vl ...
- ElasticSearch 与 Solr 的对比测试
ElasticSearch 与 Solr 的对比测试 本文从两个方面对ElasticSearch和Solr进行对比,从关系型数据库中的导入速度和模糊查询的速度. 单机对比 1. Solr 发布了4.0 ...