当前位置: 首页 > news >正文

千博企业网站管理系统 后台拿shell通过qq群可以进行友情链接交换

千博企业网站管理系统 后台拿shell,通过qq群可以进行友情链接交换,亚马逊国际站官网,专门做免费东西试吃的网站点击上方石杉的架构笔记,右上选择“设为星标” 每日早8点半,精品技术文章准时送上 往期文章 BAT 面试官是如何360无死角考察候选人的(上篇) 每秒上万并发下的Spring Cloud参数优化实战 分布式事务如何保障实际生产中99.99%高可用 记一位朋友斩获 BAT 技术…

点击上方石杉的架构笔记,右上选择“设为星标

每日早8点半,精品技术文章准时送上

90df4cebdaf3f6bb74f9eb25f73a032f.png

往期文章

BAT 面试官是如何360°无死角考察候选人的(上篇)

每秒上万并发下的Spring Cloud参数优化实战

分布式事务如何保障实际生产中99.99%高可用

记一位朋友斩获 BAT 技术专家Offer的面试经历

亿级流量架构系列之如何支撑百亿级数据的存储与计算

90df4cebdaf3f6bb74f9eb25f73a032f.png

作者:藤伦柳揶

来源:https://dwz.cn/xZFW4J8S

背景介绍

为了解决分布式链路追踪的问题,我们引入了实现OpenTracing的Jaeger来实现。然后我们为SpringBoot框架写了一个starter以让用户实现近零改造接入全链路。

由于公司有一个封装了SpringBoot的内部框架,然后我们的starter就以最新框架所使用的SpringBoot版本为基础进行开发。所以业务系统在接入的时候需要先升级框架,然后再引入我们的starter才行无缝接入全链路。

故障描述

然后有一个业务系统就按照步骤,升级框架,引入starter就接入了全链路系统,并且功能测试压力测试都已经通过了。结果我们满怀信心地就上线了。结果,线上nginx报大量http 400错误。

故障排查

出现故障后,业务系统的研发人员查了所有的日志,包括elk以及机器上的日志,都没有发现明显的错误日志。这个就。。。

几番挣扎后还是没有在线上的日志中找到任何蛛丝马迹。这个就比较绝望了。更奇怪的是在测试环境中是正常的,这个就比较诡异了。

然后我们猜想是不是之前压力测试做得不够啊,我们还是在压测环境中再压测一下看看会不会复现。

然后正好之前这个业务系统做过压测,那就赶紧找运维搭建一个压测环境。结果刚搭建完就非常给面子地复现了400错误。

然后运维同学就各种折腾,然后神奇般地在nginx中的location下加了一行配置后就好了.

proxy_set_header HOST $host

然后就开始各种查这个配置是啥意思。

这个配置的主要是在nginx在转发htp请求的时候会加上实际的Host请求头。

如http请求是  http://abc.com/hello,那么nginx在转发http请求的时候会原封不动的把host请求头(Host:abc.com)转发给后台服务。

对于nginx而言,如果没有配置proxy_set_header HOST $host的时候会默认修改Host为upstream的名称。

然后我们又在压测环境中试了一下修改之前的版本,发现是正常的。我们nginx的配置大体如下

0260a71ba5c3b50a669d1e6de518ef31.png

那总结一下现在的现象:

  • 在nginx没有配置proxy_set_header HOST $host的时候,修改之前的版本是正常的,修改之后的版本报400错误

  • 在nginx配置了proxy_set_header HOST $host之后,两个版本都是正常的

那我们到底修改了什么呢?

  • 升级SpringBoot的版本

  • 引入全链路starter

然后我们试了下去掉全链路starter的引用,发现还是400错误。然后再回退SpringBoot版本,发现是正常的

综上:是因为升级了SpringBoot版本导致了该问题,又因为是http的头部变化导致的问题,故可以大胆猜测是因为升级了Tomcat版本导致的该问题。

tomcat版本从8.5.11升级到8.5.31

故障本地复现

由前面的分析可知,nginx在没有配置proxy_set_header HOST $host 的时候,在转发http请求的时候会默认把upstream的名称作为Host头部的内容。

也就是说新版的tomcat在接收Host为sc_java(带有下划线)的http请求报了400错误

下面我们来复现一下这个错误,如下,本地部署两个使用新版本tomcat的后台服务,端口分别为8083和8084

84a34a1ce3a664a6f0ef620833daa639.png

nginx配置如下。重点是upstream是带下划线的

30d59ce7af0d51c46ec75cfbba46bbac.png

然后使用postman请求nginx,复现400错误

6d4b2ad554b30fb12bb0e39a41d54626.png

调整nginx配置,主要修改upstream为没有下划线的

7181864996239ae81460454e670d3c00.png

然后再请求,发现是正常的

cb97a6c9fc5578cc4422e6888728ce41.png

故障修复方案

  • 回退tomcat版本。代价较大

  • 线上修改nginx配置:加上配置proxy_set_header HOST $host 或者修改upstream为没有下划线的名称

根因分析

我们虽然知道了故障的原因,也知道了怎么修复这个故障。但是就是不知道新版的tomcat为什么出现这个问题。

带着这个疑问,我们组的同事在SpringBoot项目的issue中搜索了下400问题,发现确实有相关的issue

https://github.com/spring-projects/spring-boot/issues/13236

虽然看上去跟我们的问题是一样的,都是400问题,但是具体发生的原因是不一样的。

这个issue是说,如果domain name .ext 包含数字,比如 "domain.sf1m",会出现400问题。这个问题也已经在tomcat的新版本中修复了。

但是即使我使用最新的8.5.x版本的tomcat,用带有下划线的Host的http去请求tomcat的时候依然会报400错误。

也就是说,带有下划线的Host的http请求,tomcat认为是有问题的

那为什么之前版本的tomcat是正常的呢?带着这个疑问我们来分析一下tomcat的源代码。

由于之前没有看过tomcat的源代码,所以要分析出到底是哪一行代码有问题是很困难的,所以我查看了下tomcat的相关的bug

https://bz.apache.org/bugzilla/show_bug.cgi?id=62371

下面是bug中的错误stack

d9eba44ccc5fb59bc115c599acea466e.png

发现对应的代码改动如下

f057d7d6457200cd59b16841bcb5a897.png

到这里我们也就知道了处理Host头部的类就是这个 HttpParser 

然后我在本次check了下tomcat8.5.31 和8.5.11的代码,比对了一下HttpParser以及AbstractProcessor类。

对比结果如下:

0d0ad3ea67d984f384a87f6926b46f98.png

我们发现8.5.31版本的AbstractProcessor类中多了一个parseHost的方法,然后主要解析方法是Host.parse(valueMB);

319aca98943de2b29ee901e62d548b18.png

到这里我们就已经知道了为什么8.5.11版本的tomcat是正常的,主要是因为8.5.11版本的tomcat没有对Host头部进行校验,而在8.5.31版本的tomcat增加了该校验。

我们来看一下tomcat源代码的提交记录

964d875ffe00122ddcd4281b17d6dd7c.png

我们发现在 2018/4/6增加了对host/port的校验。

根因之根因

那为什么tomcat增加了这个Host的校验呢,而且不允许使用带有下划线的Host呢?实际上这个是有规范的。具体点击这个链接

https://www.ietf.org/rfc/rfc1034.txt

经验教训

好了,到这里我们就知道了,其实对于带有下划线的Host,tomcat是遵循的RFC1-1034的规范的,所以tomcat的处理是正确的。

但是tomcat在处理某些其他合法的Host的时候历史上出现过bug,但是对于下划线的处理一直是正确的。

所以,以后nginx在配置upstream的时候不能使用带有下划线的名称,还有最好在location位置上加上proxy_set_header HOST $host

END

如有收获,请划至底部,点击“在看”,谢谢!

90df4cebdaf3f6bb74f9eb25f73a032f.png

推荐阅读

  • 简历写了会Kafka,面试官90%会让你讲讲acks参数对消息持久化的影响!

  • 面试最让你手足无措的一个问题:你的系统如何支撑高并发?

  • Java高阶必备:如何优化Spring Cloud微服务注册中心架构?

  • 高并发场景下,如何保证生产者投递到消息中间件的消息不丢失?

  • 从团队自研的百万并发中间件系统的内核设计看Java并发性能优化!

  • 如果20万用户同时访问一个热点缓存,如何优化你的缓冲架构?

更多文章:

  • 2018年原创汇总

  • 2019年原创汇总(持续更新)

  • 爆款推荐

  • 面试专栏

90df4cebdaf3f6bb74f9eb25f73a032f.png

欢迎长按下图关注公众号石杉的架构笔记

15071405c4d595ec00606fd29624f487.png

BAT架构经验倾囊相授

5548e8f29d9dc0f413450fa37291143a.gif

http://www.yidumall.com/news/26042.html

相关文章:

  • 网站开发主要步骤自动点击器软件
  • 如何做网站链接分享朋友圈免费网站开发平台
  • wordpress更改网页标题正规seo关键词排名网络公司
  • seo短视频网页入口引流网站有哪些培训心得体会500字
  • 页游传奇灰色词优化培训
  • 长春平面网站建设甘肃网站推广
  • 网站开发能干什么网络市场营销
  • 老域名对做网站的表白网站制作
  • 网站建设先航科技游戏合作渠道
  • 网站建设手机版模板seo提升排名技巧
  • 受欢迎的网站建设公司最近实时热点事件
  • 网站备案流程和规则手机优化器
  • 昆明建设网站公司怎么提高百度关键词排名
  • 组成原理毕业设计代做网站推荐qq群排名优化软件官网
  • asp网站好还是php网站好班级优化大师功能介绍
  • ASP.NET实用网站开发 课后答案惠州seo博客
  • 国外网站后缀班级优化大师下载安装最新版
  • 算命购物网站建设人力资源培训
  • 建设银行 网站 交党费免费搭建网站的软件
  • 广州做网站建设哪家公司好广东网络推广运营
  • ic网站建设软文写作兼职
  • 国外wordpress主题风险优化营商环境发言材料
  • 淄博网站建设推广乐达搜什么关键词你都懂的
  • 怎样做赌博网站新闻稿发布软文平台
  • 新手如何搭建网站网站建设的重要性
  • 音乐影视类网站建设如何宣传推广自己的产品
  • 网站做app开发网页设计培训学校
  • 佛山 网站百度投诉中心在线申诉
  • 个人工作室网站模板不限制内容的搜索引擎
  • 网页设计比较优秀的网站市场推广方案模板