struts漏洞S2-016被扫描出,要求升级struts版本,查看生产struts版本2.0.12,该漏洞影响版本2.3.15以下,上网搜索,struts2.5以上的要求jdk1.7,由于项目过老,本地编译不通过,最终采取生产直接替换jar包改配置方式。

  1.替换jar包,先把struts核心包替换掉,再找struts开头的对应的jar,可以启动看报错,缺啥补啥。

     注意删除 xwork包,它已经整合到struts2-core当中了!!

本项目所用struts2.5.20

2.修改struts.xml

(1)修改头部为2.5.dtd

<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
    "http://struts.apache.org/dtds/struts-2.5.dtd">

(2)增加配置。讲action设置为动态访问

<constant name="struts.enable.DynamicMethodInvocation" value="true" />

(3)package后边添加 strict-method-invocation="false"

 <package name="xx" namespace="/" extends="struts-default" strict-method-invocation="false">

    3.修改web.xml,在2.5版本的struts2-core中没有了ng包,所以StrutsPrepareAndExecuteFilter类的路径需要修改。

将 <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>

替换成<filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class>

4.在classpath下新增log4j2.xml,配置如下:

<?xml version="1.0" encoding="UTF-8"?>

<configuration status="error">  

      <appenders>  

      </appenders>  

      <loggers>  

        <root level="info">  

        </root>  

      </loggers>  

</configuration>

  升级注意事项:

  不要删掉log4j-1.2.14.jar,否则会报错误

这种升级方式避免了老项目编译不通过问题

  附录:struts核心包作用

    commons-fileupload-1.3.3:上传文件

    commons-io-2.5:对本地文件、流进行操作

    commons-lang3-3.6:基础文件包

    commons-logging-1.1.3:日志包

    freemarker-2.3.23:生成各种文本:html、xml、rtf、java源代码等

    javassist-3.20.0-GA:使java字节码操控更加简便,是一个编译java字节码的类库,提高效率

    log4j-api-2.8.2:日志

    ognl-3.1.15:struts2独有的标签库

    struts2-core-2.5.13:struts2的核心包

struts漏洞处理--老项目struts版本升级遇到的问题的更多相关文章

  1. apache开源项目 --Struts

    struts简介 Struts是Apache软件基金会(ASF)赞助的一个开源项目.它最初是jakarta项目中的一个子项目,并在2004年3月成为ASF的顶级项目.它通过采用JavaServlet/ ...

  2. struts漏洞修补过程之S2-016

    Struts漏洞修补过程之S2-016.邪恶的Struts再次现身,这一次是远程执行漏洞.官方建议立即升级到2.3.15.1.真希望这是最后一次漏洞修补.下面是升级步骤. 1.升级到struts2.3 ...

  3. 关于Struts漏洞工具的使用

    最新struts-scan资源: https://www.cesafe.com/3486.html 一,将资源下载后,放入liunx系统中,并且需要具备python2的操作环境 二,打开终端使用如下命 ...

  4. Struts1基础、使用Struts实现登录、使用Struts HTML标签简化开发

    Struts 1基础 为什么重拾Struts 1 曾经是最主流的MVC框架 市场份额依然很大 很多遗留系统中依旧使用 维护和升级都需要熟悉Struts 1 与Struts 2相比 编码.配置繁琐 侵入 ...

  5. 【挖坑】2019年JAVA安全总结:SQL注入——新项目的开发与老项目的修复

    如何在项目中有效的防止SQL注入 写给需要的人,所有的问题源自我们的不重视. 本章略过"什么是SQL注入","如何去利用SQL注入"的讲解,仅讲如何去防御 PS ...

  6. Struts框架——(二)Struts原理with登录实例

    二. Struts基本工作流程 假设现在有以下情景: 用户正在浏览一个用STRUTS的技术构建的网站主页,主页上有个登陆表单,用户填好登陆名和密码,单击"登陆"按钮,就激活了以下一 ...

  7. 【iOS开展-94】xcode6如何使用GIT以及如何添加太老项目GIT特征?

    (1)对于一个新项目:如何使用GIT?在新项目的过程,例如,您可以选择下面的复选框. (2)针对老项目,加入GIT功能. --在终端.cd到项目文件夹 --然后输入git init,初始化一个.git ...

  8. ESLint + lint-staged 禁用老项目中的es6

    前言 ESLint作为插件化的javascript代码检测工具,为我们的平时的开发保驾护航,好处就不多说了详情查看官网. 问题 有这么一个五年前开发的老项目,机缘巧合到了我们这边来维护. 项目是zep ...

  9. Use Laravel/homestead 环境维护基于 brophp 开发的老项目

    1 前言 laravel/homestead 无疑是 laravel 项目开发的最佳环境. 如何使用这个环境维护基于 Brophp (或 Thinkphp) 开发的老项目呢? 以下是测试成功的步骤. ...

随机推荐

  1. PHP ftp_get() 函数

    定义和用法 ftp_get() 函数从 FTP 服务器上下载一个文件并保存到本地一个文件中. 如果成功,该函数返回 TRUE.如果失败,则返回 FALSE. 语法 ftp_get(ftp_connec ...

  2. Oracle删除修改字段

    Oracle 增加修改删除字段 添加字段的语法:alter table tablename add (column datatype [default value][null/not null],…. ...

  3. NX二次开发-基于MFC界面的NX对Excel读写操作(OLE方式(COM组件))

    NX二次开发API里没有对EXCAL读写操作的相关函数,市面上有很多种方法去实现,比如UFUN调KF,ODBC,OLE(COM组件)等等.这里我是用的OLE(COM组件)方式去做的,这种在VC上创建的 ...

  4. nuxt.js 本地开发跨域问题(Access-Control-Allow-Origin)及其解决方案

    先运行npm i @gauseen/nuxt-proxy -D 再nuxt.config.js的module.exports 里面添加如下代码 modules:[ '@nuxtjs/axios', / ...

  5. share memory

    header for public argument:shmdata.h #define TEXT_SZ 2048 struct shared_use_st { int written; char t ...

  6. Centos7.4安装elasticsearch6.3+kibana6.3集群

    Centos7.4安装elasticsearch+kibana集群 Centos7.4安装elasticsearch+kibana集群 主机环境 软件环境 主机规划 主机安装前准备 安装jdk1.8 ...

  7. PHP面试 PHP基础知识 一(引用变量)

    PHP引用变量 常见引用变量面试题: 什么是引用变量? 在PHP中用什么符号定义引用变量? 考点:PHP的引用变量的概念及定义方式 概念:在PHP中引用意味着用不用的名字访问同一个变量内容     定 ...

  8. 1251 client does not support

    1.mysql -uroot -p 123456        (用户root,密码123465) 2.use mysql: 3.ALTER USER 'root'@'localhost' IDENT ...

  9. Display与 Visibility的区别

    隐藏元素的方法有: display:none或visibility:hidden visibility:hidden可以隐藏某个元素,但隐藏的元素仍需占用与未隐藏之前一样的空间.也就是说,该元素虽然被 ...

  10. MySQL数据库_目录

    MySQL数据库初识 MySQL的库表详细操作 MySQL行(记录)的详细操作 MySQL之单表查询 MySQL之多表查询 Navicat工具.pymysql模块 MySQL之视图.触发器.事务.存储 ...