记一次项目系统安测高危bug的修复历程

本文记录了一次修复Struts2项目中Appscan检测出的高危漏洞经历,包括跨站点脚本编制和文件参数Shell命令注入。通过分析问题原因,采取了自定义拦截器对所有Action请求进行全局过滤敏感信息的解决方案,介绍了拦截器的工作原理和实现步骤,以及在Struts2中应用拦截器进行安全防护的方法。
摘要由CSDN通过智能技术生成

项目场景:

项目架构:spring+struts2+hibernate
之所以记录为历程不是过程,是因为是第一次修复专业的安测人员检测出来的漏洞,加上前期对于此类漏洞和strust2架构不够深入了解,修复的过程较长,其实做后回想过来,这类问题还是蛮简单的。(慢慢积累吧)

安测人员使用测试工具: Appscan


问题描述:

高危漏洞主要分为两类

测试过程都是从页面的某一个参数从某个位置进行控制(在参数中携带脚本敏感字符)。

推理: 测试结果似乎指示存在脆弱性,因为 Appscan 在响应中成功嵌入了脚本,在用户浏览器中装入页 面时将执行该脚本。

跨站点脚本编制:
在这里插入图片描述

测试请求和响应:
在这里插入图片描述

在这里插入图片描述

文件参数 文件参数 Shell 命令注入 命令注入
在这里插入图片描述

在这里插入图片描述


原因分析:

都是页面参数携带敏感信息,配合脚本通过系统漏洞进行不正常的系统行为。


解决方案:

过滤或者拦截携带脚本关键词。

经过考虑和实践,最终采用的方法是对页面所有的action方法进行一个全局的拦截。

Struts2 拦截器 Interceptor
在这里插入图片描述
拦截器的工作原理如上图,每一个Action请求都包装在一系列的拦截器的内部。拦截器可以在Action执行直线做相似的操作也可以在Action执行直后做回收操作。

每一个Action既可以将操作转交给下面的拦截器,Action也可以直接退出操作返回客户既定的画面。

自定义一个拦截器需要三步:

1 自定义一个实现Interceptor接口(或者继承自AbstractInterceptor)的类。

2 在strutx.xml中注册上一步中定义的拦截器。
strust.xml配置文件如下:(在使用拦截器的时候,在Action里面必须最后一定要引用struts2自带的拦截器缺省堆栈defaultStack。

        <interceptors>
			<!-- 定义日志拦截器   拦截form表单提交请求含有关键字-->
			<interceptor name="logger" class="com.custle.controller.mp.interceptor.OperatorLogInterceptor"></interceptor>
          	
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值