api-gateway实践(03)新服务网关 - 网关请求拦截检查
参考链接:http://www.cnblogs.com/jivi/archive/2013/03/10/2952829.html
一、为什么要拦截检查请求?
防止重放攻击、篡改重放,进行使用规格检查
1、请求可能是重放攻击
重放攻击的基本原理就是把以前窃听到的数据原封不动地重新发送给接收方。很多时候,网络上传输的数据是加密过的,此时窃听者无法得到数据的准确意义。但如果他知道这些数据的作用,就可以在不知道数据内容的情况下通过再次发送这些数据达到愚弄接收端的目的。
例如,有的系统会将鉴别信息进行简单加密后进行传输,这时攻击者虽然无法窃听密码,但他们却可以首先截取加密后的口令然后将其重放,从而利用这种方式进行有效的攻击。
再比如,假设网上存款系统中,一条消息表示用户支取了一笔存款,攻击者完全可以多次发送这条消息而偷窃存款。
2、请求可能是篡改重放
网上有一些工具,如:IEC、fiddler,可以拦截IE表单请求,篡改请求报文数据后再提交给服务器。
- 实现拦截请求,篡改数据功能的方法有很多,如使用WINPCAP,直接从网卡截包然后篡改,或者HOOK住SEND函数,或者其它相关的网络API。
- 使用WINPCAP实现这个功能,有点牛刀杀鸡了,而使用HOOK技术,又不是太安全,基本上带主动防御,智能行为分析的杀软,HOOK用到的几个函数都是被严密监控的。
- 我们还可以采用--代理拦截技术,看到代理两个字,稍稍有点计算机知识的人,第一时间反应的词语应该都是代理服务器,是的,代理拦截技术,正是基于代理服务器技术实现的。
一般的请求发送模式:
加入代理服务器后:
使用代理服务器后,所有的HTTP请求,都是先发到代理服务器,然后由代理服务器重新包装后,再发给目标(实际)服务器,响应也是如此,
代理服务器先接收来自目标(实际)服务器的响应,然后包装后发给客户机。
所以,实现一个代理服务器,就可以拦截请求,篡改数据了。
如何实现一个代理服务器,参见:http://www.cnblogs.com/jivi/archive/2013/03/10/2952829.html
3、需要对客户请求进行使用规格限制
同时在线请求控制
时段访问总量控制
。。。
二、网关控制
1、请求防攻击,默认关闭
timestamp检查 & nonce检查
1.1、timestamp检查
1.2、nonce检查
2、请求防篡改,签名比对
为了对识别有效的客户端,我们可以对请求进行防篡改检查,具体的做法就是客户端对请求进行签名发送,服务端进行签名比对。
合法的客户端是属于某个开发者的,这个开发者申请使用某个api获得服务提供者同意后,可以通过注册中心绑定一对前端访问密钥,这对密钥包括一个key和一个secret,开发者的客户端使用secret对要发送的请求进行签名后,在请求中携带key和签名,发送请求给网关。
网关会根据请求中携带的key在注册中心找到对应的secret,重新对请求进行签名,和请求中携带的签名进行比对,一致则放行,不一致则认为这个请求是被篡改过的。
2.1、客户端签名过程
- 请求头中要携带签名key:x-ca-front-devclientkeyey=客戶端签名key
- 请求头中要指定参与签名的请求头,请区分大小写:x-ca-front-sign-headers='x-ca-front-timestamp,x-ca-front-nonce'
- 请求头中要携带使用签名key和签名算法计算的签名串:x-ca-front-signature=客戶端签名
以下是请求签名Sign类中定义的网关侧请求头
2.2、签名算法
- String secret:签名密钥DevClientSecret
- String uri:服务端用request.getUri()返回的内容, 不带参数
- String httpMethod:POST/GET/DELETE/PUT
- Map<String, String> headersToSign:要参与签名的头key列表,用英文逗号隔开
- Map<String, Object> paramsMap:如果是Get,所有参数列表,如果是post,url后面跟的参数列表
- byte[] inputStreamBytes:如果是post-bytes和put-bytes,就是body体的bytes;如果是post-form,字典序的参数列表串.getBytes()
2.3、签名例子
3、请求使用规格检查,默认关闭,如果none认证,也关闭
3.1、同时在线请求控制
3.2、时段访问总量控制
三、补充说明
api-gateway实践(03)新服务网关 - 网关请求拦截检查的更多相关文章
- [转载] 构建微服务:使用API Gateway
原文: http://mp.weixin.qq.com/s?__biz=MzA5OTAyNzQ2OA==&mid=206889381&idx=1&sn=478ccb35294c ...
- 微服务实战(二):使用API Gateway
微服务实战(一):微服务架构的优势与不足 微服务实战(二):使用API Gateway 微服务实战(三):深入微服务架构的进程间通信 微服务实战(四):服务发现的可行方案以及实践案例 微服务实践(五) ...
- 微服务实战-使用API Gateway
当你决定将应用作为一组微服务时,需要决定应用客户端如何与微服务交互.在单体式程序中,通常只有一组冗余的或者负载均衡的服务提供点.在微服务架构中,每一个微服务暴露一组细粒度的服务提供点.在本篇文章中,我 ...
- 使用API Gateway
http://dockone.io/article/482 [编者的话]本系列的第一篇介绍了微服务架构模式.它讨论了采用微服务的优点和缺点,除了一些复杂的微服务,这种模式还是复杂应用的理想选择. Do ...
- 微服务实战(二):使用API Gateway - DockOne.io
原文:微服务实战(二):使用API Gateway - DockOne.io [编者的话]本系列的第一篇介绍了微服务架构模式.它讨论了采用微服务的优点和缺点,除了一些复杂的微服务,这种模式还是复杂应用 ...
- 谈谈微服务中的 API 网关(API Gateway)
前言 又是很久没写博客了,最近一段时间换了新工作,比较忙,所以没有抽出来太多的时间写给关注我的粉丝写一些干货了,就有人问我怎么最近没有更新博客了,在这里给大家抱歉. 那么,在本篇文章中,我们就一起来探 ...
- 微服务中的 API 网关(API Gateway)
API 网关(API Gateway)提供高性能.高可用的 API 托管服务,帮助用户对外开放其部署在 ECS.容器服务等云产品上的应用,提供完整的 API 发布.管理.维护生命周期管理.用户只需进行 ...
- 服务中的 API 网关(API Gateway)
我们知道在微服务架构风格中,一个大应用被拆分成为了多个小的服务系统提供出来,这些小的系统他们可以自成体系,也就是说这些小系统可以拥有自己的数据库,框架甚至语言等,这些小系统通常以提供 Rest Api ...
- API Gateway微服务
微服务中的 API 网关(API Gateway) 前言 又是很久没写博客了,最近一段时间换了新工作,比较忙,所以没有抽出来太多的时间写给关注我的粉丝写一些干货了,就有人问我怎么最近没有更新博客了 ...
随机推荐
- UML类图一
转自:http://blog.csdn.net/lovelion/article/details/7838679 类图用于描述系统中所包含的类以及它们之间的相互关系,帮助人们简化对系统的理解,它是系统 ...
- .msi安装包安装方法(安装错误2503和2502)
把鼠标放到Win8屏幕的最左下角,等待Win8 Metro界面的缩略图出现后点击鼠标右键,在弹出的菜单中选择“命令提示符(管理员)”在“命令提示符(管理员)”中输入 msiexec /package ...
- 使用.NET Core快速开发一个较正规的命令行应用程序
程序员的世界,命令行工具一直是"体验非常友好"的工具,也能自动化完成很多事情,同时还能结合shell来进行某项任务的批处理(脚本).在.NET Core中,命令行应用程序是基础,但 ...
- Python 中的登陆获取数据跳转页面(不含数据库)
简单表单和模板: import os.path import tornado.httpserver import tornado.ioloop import tornado.options impor ...
- Mycat 分片规则详解--取模范围分片
实现方式:该算法先进行取模,然后根据取模值所属范围进行分片 优点:可以自主决定取模后数据的节点分布 缺点:dataNode 划分节点是事先建好的,需要扩展时比较麻烦. 配置示例: <tableR ...
- Mycat 配置说明(schema.xml )
Schema.xml 作为 MyCat中重要的配置文件之一,管理着 MyCat的逻辑库.表.分片规则.DataNode以 及DataSource.弄懂这些配置,是正确使用MyCat的前提. schem ...
- 笔记:Maven 项目报告插件
Maven 项目报告插件,都是对于前面生成的项目站点的内容丰富,因此都是基于项目站点的,生成的命令和生成项目站点一致(mvn site),项目报告插件的配置和一般插件不同,是在 project-> ...
- Python 中 Iterator(迭代器)和Iterable(迭代对象)的区别
直接可以用作for循环的数据类型有以下几种: tuple.list.dict.str等, 上述数据类型可以用作for循环的叫做可迭代对象Iterable.可以使用isinstance判断一个对象是否是 ...
- elementUI-事件绑定Bug
刚开始使用elementUI的,慢慢的摸索.今天在绑定click事件的时候,在给el-某标签绑定.然后事件失效了.我就很纳闷,这怎么可能失效呢,当我给它的自己元素嵌套了一层div的时候,仍可是使用所以 ...
- Beta第六天
听说