参考链接: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

    [编者的话]本系列的第一篇介绍了微服务架构模式.它讨论了采用微服务的优点和缺点,除了一些复杂的微服务,这种模式还是复杂应用的理想选择. 点击这里获取云原生干货 当你决定将应用作为一组微服务时,需要决定 ...

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

    [编者的话]本系列的第一篇介绍了微服务架构模式.它讨论了采用微服务的优点和缺点,除了一些复杂的微服务,这种模式还是复杂应用的理想选择. 当你决定将应用作为一组微服务时,需要决定应用客户端如何与微服务交 ...

  3. 使用API Gateway

    使用API Gateway 转自:http://www.open-open.com/lib/view/open1436089902667.html 它讨论了采用微服务的优点和缺点,除了一些复杂的微服务 ...

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

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

  5. api商品分享源码_谈谈微服务中的 API 网关(API Gateway)

    在本篇文章中,我们就一起来探讨一下 API 网关在整个微服务分布式架构中的一个作用. # 背景我们知道在微服务架构风格中,一个大应用被拆分成为了多个小的服务系统提供出来,这些小的系统他们可以自成体系, ...

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

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

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

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

  8. 一文搞懂 Service Mesh 和 API Gateway 关系和区别

    公众号关注 「奇妙的 Linux 世界」 设为「星标」,每天带你玩转 Linux ! 关于Service Mesh和API Gateway之间的关系,这个问题过去两年间经常被问起,社区也有不少文章和资 ...

  9. 中小型研发团队架构实践:微服务架构

    http://www.infoq.com/cn/articles/architecture-practice-06-microservice-architect 一.MSA 简介 1.1.MSA 是什 ...

最新文章

  1. 创建 VXLAN - 每天5分钟玩转 OpenStack(111)
  2. android gridview滑动卡,Android RecyclerView的卡顿问题
  3. 信息系统项目管理师-第5章:项目范围管理-重点汇总
  4. 换个姿势为安装包重签名
  5. 可怕的DefaultAbstractHelperImpl
  6. JS数据结构与算法——选择排序(把小的数字依次往前放)
  7. python成绩统计_python统计考试成绩排名
  8. 微软:Mozilla,我劝你拥抱 Chromium!
  9. C#图片处理之: 获取数码相片的EXIF信息(二)
  10. 创建maven的web项目,并用jetty调试
  11. js进阶 10-3 jquery中为什么用document.ready方法
  12. Can't connect to X11 window server using 'localhos
  13. setw()函数使用_什么是C++ setw() 函数?
  14. Java解析KML文件
  15. 文章2021_01_05_stata15在mac上的dta编码问题和系统crash
  16. linux 命令 查询丢包率,linux测试丢包率的命令 linux查看丢包率命令
  17. 三种方法,让WPF项目生成单文件
  18. Access数据库修复 压缩
  19. python伪装ip_Python爬虫:使用IP代理池伪装你的IP地址继续爬
  20. dts同步常见问题_阿里云DTS数据同步常见问题(一)

热门文章

  1. logstash grok mysql_【Logstash系列】使用Redis并自定义Grok匹配
  2. function click_click事件的累加问题解决
  3. 卡通驱动项目ThreeDPoseTracker——模型驱动解析
  4. 20162317 2017-2018-1 《程序设计与数据结构》第8周学习总结
  5. PaddlePaddle开源平台的应用
  6. 新手上路之Hibernate:第一个Hibernate例子
  7. rvm RuvyGem Cocoapods brew
  8. Java-jdbc连接数据库
  9. BZOJ1834 [ZJOI2010]network 网络扩容
  10. POJ2402 Palindrome Numbers 回文数