参考链接: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、客户端签名过程

  1. 请求头中要携带签名key:x-ca-front-devclientkeyey=客戶端签名key
  2. 请求头中要指定参与签名的请求头,请区分大小写:x-ca-front-sign-headers='x-ca-front-timestamp,x-ca-front-nonce'
  3. 请求头中要携带使用签名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)新服务网关 - 网关请求拦截检查的更多相关文章

  1. [转载] 构建微服务:使用API Gateway

    原文: http://mp.weixin.qq.com/s?__biz=MzA5OTAyNzQ2OA==&mid=206889381&idx=1&sn=478ccb35294c ...

  2. 微服务实战(二):使用API Gateway

    微服务实战(一):微服务架构的优势与不足 微服务实战(二):使用API Gateway 微服务实战(三):深入微服务架构的进程间通信 微服务实战(四):服务发现的可行方案以及实践案例 微服务实践(五) ...

  3. 微服务实战-使用API Gateway

    当你决定将应用作为一组微服务时,需要决定应用客户端如何与微服务交互.在单体式程序中,通常只有一组冗余的或者负载均衡的服务提供点.在微服务架构中,每一个微服务暴露一组细粒度的服务提供点.在本篇文章中,我 ...

  4. 使用API Gateway

    http://dockone.io/article/482 [编者的话]本系列的第一篇介绍了微服务架构模式.它讨论了采用微服务的优点和缺点,除了一些复杂的微服务,这种模式还是复杂应用的理想选择. Do ...

  5. 微服务实战(二):使用API Gateway - DockOne.io

    原文:微服务实战(二):使用API Gateway - DockOne.io [编者的话]本系列的第一篇介绍了微服务架构模式.它讨论了采用微服务的优点和缺点,除了一些复杂的微服务,这种模式还是复杂应用 ...

  6. 谈谈微服务中的 API 网关(API Gateway)

    前言 又是很久没写博客了,最近一段时间换了新工作,比较忙,所以没有抽出来太多的时间写给关注我的粉丝写一些干货了,就有人问我怎么最近没有更新博客了,在这里给大家抱歉. 那么,在本篇文章中,我们就一起来探 ...

  7. 微服务中的 API 网关(API Gateway)

    API 网关(API Gateway)提供高性能.高可用的 API 托管服务,帮助用户对外开放其部署在 ECS.容器服务等云产品上的应用,提供完整的 API 发布.管理.维护生命周期管理.用户只需进行 ...

  8. 服务中的 API 网关(API Gateway)

    我们知道在微服务架构风格中,一个大应用被拆分成为了多个小的服务系统提供出来,这些小的系统他们可以自成体系,也就是说这些小系统可以拥有自己的数据库,框架甚至语言等,这些小系统通常以提供 Rest Api ...

  9. API Gateway微服务

    微服务中的 API 网关(API Gateway)   前言 又是很久没写博客了,最近一段时间换了新工作,比较忙,所以没有抽出来太多的时间写给关注我的粉丝写一些干货了,就有人问我怎么最近没有更新博客了 ...

随机推荐

  1. Unity如何管理住Android 6.0 调皮的权限

    前天我们项目有这么个需求,台湾版本由于要上谷歌Play要求安卓系统6.0以上的动态申请权限,对于一个做Unity的来说,是不是有点懵逼,这我该何去何从呢?我想静静,静静的想一想,权限也不就那么点事吗? ...

  2. c++函数常用

    isalnum 判断一个字符是否是字符类的数字或字母isalpha 判断一个字符是否是字母isblank 判断一个字符是否是空白字符(空格,水平制表符,TAB)iscntrl 判断一个控制符(ASCI ...

  3. NYOJ 题目12喷水装置(二)

    #include<iostream> #include<algorithm> #include<cmath> using namespace std; struct ...

  4. loadrunner 录制中文出现乱码的解决办法

  5. java 多线程(总结)

    今天看了几篇关于java多线程问题的文章,将他们的部分内容引过来总结下,也算是对java多线程这类问题的整理. 在多线程中,必须明白两个问题,一是多线程实现,二是代码同步. 在java中要想实现多线程 ...

  6. js中的Hook

    1. 简单理解: hook(钩子)就是: 把将要执行的的函数或者一系列动作注册到一个统一的接口下面, 当应用程序调用此接口(即hook)时,就等于调用了这一系列动作.

  7. Maven-06: 插件的内置绑定

    Maven的生命周期与插件相互绑定,用以完成实际的构建任务.具体而言,是生命周期的阶段与插件的目标相互绑定,以完成某个具体的构建任务.例如项目编译这一任务,它对应default生命周期的compile ...

  8. POJ-1256 next_permutation函数应用

    字典序列: 在字典序中蕴含着一个点,就是大小的问题,谁先出现,谁后出现的问题.譬如a<b<c,出现顺序就是a,b,c. 本题中字符集是所有大小写字母,而题目中规定的谁大谁小已经不是按asc ...

  9. 【Windows】定时任务设置

    Windows定时任务 linux上面的定时任务已经解除过好多次了.不外乎crontab,at之类的命令,而windows上的定时任务今天才偶尔看到怎么设置.想到以后生活上可能会用到一些这方面的知识就 ...

  10. Spring Cloud Contract

    http://www.infoq.com/cn/news/2017/04/spring-cloud-contract 在默认情况下,我们希望用户以JAR文件的形式将生产者存根和契约发布到Maven库. ...