前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >混沌工程工具:Chaosblade Java业务代码注入原理(5)

混沌工程工具:Chaosblade Java业务代码注入原理(5)

原创
作者头像
AIOPS
修改2023-10-10 15:12:35
6481
修改2023-10-10 15:12:35
举报
文章被收录于专栏:高可用高可用

概述

上篇文章(混沌工程工具:业务代码注入原理(4)-腾讯云开发者社区-腾讯云),讲了Java程序从源代码到Native code的流程、JVM字节码修改的基本原理。本节分析Chaosblade的几个经典注入项Servelet、Redis Jedis库、MySQL JDBC库故障注入的原理。

混沌工程工具系列传送门:

1、 混沌工程工具:Chaos-mesh与Chaosblade技术实现与原理分析(1)-腾讯云开发者社区-腾讯云

2、 混沌工程工具:chaos-mesh注入项原理分析(2)-腾讯云开发者社区-腾讯云

3、 混沌工程工具:chaosblade在服务器上注入项原理分析(3)-腾讯云开发者社区-腾讯云

4、 混沌工程工具:业务代码注入原理(4)-腾讯云开发者社区-腾讯云

5、 混沌工程工具:Chaosblade Java业务代码注入原理(5)-腾讯云开发者社区-腾讯云

6、 混沌工程工具:混沌工程实施过程及持久价值(7)-腾讯云开发者社区-腾讯云

7、 混沌工程工具:混沌工程定位及原则梳理(8)-腾讯云开发者社区-腾讯云

8、 混沌工程工具:一个混沌工程设计的例子(9)-腾讯云开发者社区-腾讯云

Servlet delay工作流程展示

对/login接口注入,指定请求URL即可完成注入。

下面是命令:

代码语言:javascript
复制
# 参数展示
Flags:
      --effect-count string                The count of chaos experiment in effect
      --effect-percent string              The percent of chaos experiment in effect
      --querystring string                 The query string that is contained in the request URL after the path.
      --querystring-regex-pattern string   regex match the query string that is contained in the request URL after the path.
      --requestpath string                 equal RequestUri without ContextPath
      --requestpath-regex-pattern string   regex match RequestUri without ContextPath
      --offset string                      delay offset for the time
# 命令
blade create servlet delay  --time 3000 --requestpath /login --effect-percent 20

Servelet注入原理

注入点匹配

涉及几个常用框架,简述如下:

spring framework注入class是:org.springframework.web.servlet.FrameworkServlet

ALIBABA_WEBX_FRAMEWORK注入class是:com.alibaba.citrus.webx.servlet.WebxFrameworkFilter

SPRING_HTTP_SERVLET_BEAN注入class是:org.springframework.web.servlet.HttpServletBean

HTTP_SERVLET注入class是:javax.servlet.http.HttpServlet

注入方法统一为:doGet/doPost/doDelete/doPut/doFilter

启动试验匹配

1、 通过反射机制,获取每个Servelet请求的URI/method,

2、 与用户输入的实验参数进行匹配。如果匹配成功,则开始执行注入。

执行动作

延迟:执行默认的DefaultDelayExecutor class/sleep方法,具体的语句:TimeUnit.MILLISECONDS.sleep(timeInMillis)

抛异常:执行默认的DefaultThrowExceptionExecutor class/throwCustomException/throwDeclaredException方法。

Redis-Jedis库注入原理

原理:通过jedis连接库,进行故障注入

注入点匹配

注入class是redis.clients.jedis.Protocol,注入method是sendCommand

启动试验匹配

1、 分流Jedis3.X与Jedis4.X:根据参数长度及参数类型区分。Jedis4.x参数长度是3,类型是redis.clients.jedis.CommandArguments,Jedis3.x参数长度是2,类型是byte[]

2、 根据入参,获取当前指令操作的key值,及执行的命令名称。

3、 与用户输入的实验参数进行匹配。如果匹配成功,则开始执行注入。

执行动作

延迟:执行默认的DefaultDelayExecutor class/sleep方法,具体的语句:TimeUnit.MILLISECONDS.sleep(timeInMillis)

抛异常:执行默认的DefaultThrowExceptionExecutor class/throwCustomException/throwDeclaredException方法。

MySQL注入原理

原理:通过jdbc连接库,进行故障注入。

注入点匹配

MySQL5:注入class是com.mysql.jdbc.MysqlIO;注入method是sqlQueryDirect

MySQL8:注入class是com.mysql.cj.NativeSession,注入method是execSQL

启动试验匹配

1、 分流MySQL5与MySQL8:根据连接mysql的jdbc类名,匹配com.mysql.jdbc.MysqlIO,匹配成功就走到MySQL5,否则走到MySQL8.(两个版本获取第二步的参数方式不一样)

2、 利用反射机制,获取host/port/database/table/sql/sql类型等参数

3、 与用户输入的实验参数进行匹配。如果匹配成功,则开始执行注入。

执行动作

延迟:执行默认的DefaultDelayExecutor class/sleep方法,具体的语句:TimeUnit.MILLISECONDS.sleep(timeInMillis)

抛异常:执行默认的DefaultThrowExceptionExecutor class/throwCustomException/throwDeclaredException方法。

我正在参与2023腾讯技术创作特训营第二期有奖征文,瓜分万元奖池和键盘手表

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 概述
  • 混沌工程工具系列传送门:
  • Servlet delay工作流程展示
  • Servelet注入原理
    • 注入点匹配
      • 启动试验匹配
        • 执行动作
        • Redis-Jedis库注入原理
          • 注入点匹配
            • 启动试验匹配
              • 执行动作
              • MySQL注入原理
                • 注入点匹配
                  • 启动试验匹配
                    • 执行动作
                    相关产品与服务
                    混沌演练平台
                    混沌演练平台(Chaotic Fault Generator)提供高效便捷、安全可靠的故障演习服务,除可视化故障注入服务外,还提供行业经验模板,监控护栏等核心功能,致力于帮助用户及时发现业务容灾隐患、验证高可用预案的有效性,从而提高系统的可用性和韧性。
                    领券
                    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档