- 浏览: 7943765 次
- 性别:
- 来自: 广州
文章分类
- 全部博客 (2425)
- 软件工程 (75)
- JAVA相关 (662)
- ajax/web相关 (351)
- 数据库相关/oracle (218)
- PHP (147)
- UNIX/LINUX/FREEBSD/solaris (118)
- 音乐探讨 (1)
- 闲话 (11)
- 网络安全等 (21)
- .NET (153)
- ROR和GOG (10)
- [网站分类]4.其他技术区 (181)
- 算法等 (7)
- [随笔分类]SOA (8)
- 收藏区 (71)
- 金融证券 (4)
- [网站分类]5.企业信息化 (3)
- c&c++学习 (1)
- 读书区 (11)
- 其它 (10)
- 收藏夹 (1)
- 设计模式 (1)
- FLEX (14)
- Android (98)
- 软件工程心理学系列 (4)
- HTML5 (6)
- C/C++ (0)
- 数据结构 (0)
- 书评 (3)
- python (17)
- NOSQL (10)
- MYSQL (85)
- java之各类测试 (18)
- nodejs (1)
- JAVA (1)
- neo4j (3)
- VUE (4)
- docker相关 (1)
最新评论
-
xiaobadi:
jacky~~~~~~~~~
推荐两个不错的mybatis GUI生成工具 -
masuweng:
(转)JAVA获得机器码的实现 -
albert0707:
有些扩展名为null
java 7中可以判断文件的contenttype了 -
albert0707:
非常感谢!!!!!!!!!
java 7中可以判断文件的contenttype了 -
zhangle:
https://zhuban.me竹板共享 - 高效便捷的文档 ...
一个不错的网络白板工具
struts2安全漏洞频发,最近把这个升级了,但是发现了一些问题;
1、以前的url不能访问了,比如“user!list.do”,其中user是配置在action中的action名称,list是action中的方法。
分析:
第一步:调试程序发现获取的ActionMapper变量中,name变成了user!list, method属性变成了null,很显然正确情况下name应该是user,method应该是list。跟进到DefaultActionMapper中时发现parseNameAndNamespace这个方法截取字符串是错误的,第一个直觉告诉我struts的开发者没有这么愚蠢,是不是后边又进行
了修正了呢?
第二步:继续跟进代码发现在parseNameAndNamespace这个方法后边的parseActionName方法里又进行了一次处理,这个时候会把name属性从“!”进行分割重新获
取到name和method方法,很显然这样就对了。但是这个操作必须要根据DefaultActionMapper的成员变量allowDynamicMethodCalls属性来区别,当这个属性为true
的时候,才能执行后边的代码。那么这个属性又是在什么时候被设置的呢?
第三步:一看DefaultActionMapper源码的构造函数,其中没有这个变量,然后我就想是不是set方法设置进来的,一看源码如下:
@Inject(StrutsConstants.STRUTS_ENABLE_DYNAMIC_METHOD_INVOCATION)
public void setAllowDynamicMethodCalls(String allow) {
allowDynamicMethodCalls = "true".equesIgnoreCase(allow);
}
很显然是被注入进来的。
第四步:剩余的过程也是跟进,可以省略了,最终这些变量是从struts-core-2.3.16.3.jar下的default.properties里来。和旧的版本一比较,
果然struts.enable.DynamicMethodInvocation在2.3.15版本里设置的是true,而在2.3.16.3里是设置为false的。
我就用“struts.enable.DynamicMethodInvocation”这个关键字上网一搜,果然是struts小组的人修改了这个属性,把默认修改为打开。然后我有上struts官网一看。唉,果然如此。看来,之前我不关心升级版本的新功能真是罪孽!导致浪费了这么多的时间,以后这方面要改进。struts官方说明的链接如下:
http://struts.apache.org/release/2.3.x/docs/version-notes-23152.html
问题清楚了解决起来就容易了,在我们项目的struts.xml配置文件中加入以下配置:
<constant name="struts.enable.DynamicMethodInvocation" value="true"/>
2、这次引入了struts的零配置,但是发现一个问题就是这个零配置的ActionSupport或者是有execute方法才能被零配置组件识别,这是怎么回事?
经过调试发现在PackageBasedActionConfigBuilder类的buildConfiguration方法中要根据mapAllMatches来判断,如果这个属性是true则能被struts插件识别,否则就必须要继承ActionSupport,或者必须使用零配置的Action注解,否则就不会被识别。那么这个变量又是如何来的呢?经过追代码发现这个是通过当前类的setMapAllMatches方法注入的,这个变量在convention组件的sturts-plugin.xml文件中配置了,而且默认值是false。
问题清楚了,解决办法就是在struts.xml的配置文件中配置<constant name="struts.convention.action.mapallmatches" value="true"/>即可解决。
1、以前的url不能访问了,比如“user!list.do”,其中user是配置在action中的action名称,list是action中的方法。
分析:
第一步:调试程序发现获取的ActionMapper变量中,name变成了user!list, method属性变成了null,很显然正确情况下name应该是user,method应该是list。跟进到DefaultActionMapper中时发现parseNameAndNamespace这个方法截取字符串是错误的,第一个直觉告诉我struts的开发者没有这么愚蠢,是不是后边又进行
了修正了呢?
第二步:继续跟进代码发现在parseNameAndNamespace这个方法后边的parseActionName方法里又进行了一次处理,这个时候会把name属性从“!”进行分割重新获
取到name和method方法,很显然这样就对了。但是这个操作必须要根据DefaultActionMapper的成员变量allowDynamicMethodCalls属性来区别,当这个属性为true
的时候,才能执行后边的代码。那么这个属性又是在什么时候被设置的呢?
第三步:一看DefaultActionMapper源码的构造函数,其中没有这个变量,然后我就想是不是set方法设置进来的,一看源码如下:
@Inject(StrutsConstants.STRUTS_ENABLE_DYNAMIC_METHOD_INVOCATION)
public void setAllowDynamicMethodCalls(String allow) {
allowDynamicMethodCalls = "true".equesIgnoreCase(allow);
}
很显然是被注入进来的。
第四步:剩余的过程也是跟进,可以省略了,最终这些变量是从struts-core-2.3.16.3.jar下的default.properties里来。和旧的版本一比较,
果然struts.enable.DynamicMethodInvocation在2.3.15版本里设置的是true,而在2.3.16.3里是设置为false的。
我就用“struts.enable.DynamicMethodInvocation”这个关键字上网一搜,果然是struts小组的人修改了这个属性,把默认修改为打开。然后我有上struts官网一看。唉,果然如此。看来,之前我不关心升级版本的新功能真是罪孽!导致浪费了这么多的时间,以后这方面要改进。struts官方说明的链接如下:
http://struts.apache.org/release/2.3.x/docs/version-notes-23152.html
问题清楚了解决起来就容易了,在我们项目的struts.xml配置文件中加入以下配置:
<constant name="struts.enable.DynamicMethodInvocation" value="true"/>
2、这次引入了struts的零配置,但是发现一个问题就是这个零配置的ActionSupport或者是有execute方法才能被零配置组件识别,这是怎么回事?
经过调试发现在PackageBasedActionConfigBuilder类的buildConfiguration方法中要根据mapAllMatches来判断,如果这个属性是true则能被struts插件识别,否则就必须要继承ActionSupport,或者必须使用零配置的Action注解,否则就不会被识别。那么这个变量又是如何来的呢?经过追代码发现这个是通过当前类的setMapAllMatches方法注入的,这个变量在convention组件的sturts-plugin.xml文件中配置了,而且默认值是false。
问题清楚了,解决办法就是在struts.xml的配置文件中配置<constant name="struts.convention.action.mapallmatches" value="true"/>即可解决。
发表评论
-
复习:强迫线程顺序执行方式
2019-01-03 23:42 1579方法1: 三个线程,t1,t2,t3,如果一定要按顺序执行, ... -
(转)不错的前后端处理异常的方法
2019-01-02 23:16 2019前言 在 Web 开发中, 我们经常会需要处理各种异常, 这是 ... -
info q的极客时间大咖说等资料下载
2018-08-15 08:40 3472info q的极客时间大咖说等资料下载,还有不少思维导图 链 ... -
CXF 客户端超时时间设置(非Spring配置方式)
2018-07-03 22:38 2236import org.apache.cxf.endpoint. ... -
(转)synchronized关键字画像:正确打开方式
2018-06-14 09:25 490https://mp.weixin.qq.com/s/b3Sx ... -
CountDownLatch的例子
2018-06-13 14:10 691public class StatsDemo { ... -
两道面试题,带你解析Java类加载机制
2018-06-12 16:29 611https://mp.weixin.qq.com/s/YTa0 ... -
Spring中获取request的几种方法,及其线程安全性分析
2018-06-11 09:03 671https://mp.weixin.qq.com/s/KeFJ ... -
内部类小结
2018-06-06 10:25 438https://mp.weixin.qq.com/s/hErv ... -
JVM虚拟机小结1
2018-06-04 20:43 5441 jps -l //列出详细的类名和进程ID 2)jps ... -
windows下自带命令行工具查看CPU资源情况等
2018-06-04 12:53 3101微软提供了不少命令行 ... -
(收藏)深入分析Java的序列化与反序列化
2018-05-30 15:21 617https://mp.weixin.qq.com/s/T2Bn ... -
apache common包中的序列化工具
2018-05-30 09:10 1844什么是序列化 我们的 ... -
JAVA8 JVM的变化: 元空间(Metaspace)
2018-05-24 22:30 967本文将会分享至今为至我收集的关于永久代(Permanent G ... -
(转)服务器性能指标(一)——负载(Load)分析及问题排查
2018-05-21 21:03 1363原创: Hollis Hollis 负载 ... -
(转)对象复用
2018-05-20 15:27 863public class Student { priv ... -
mapreduce中入门中要注意的几点
2018-05-06 08:59 674在 mapreduce中,比如有如下的词: I love b ... -
HDFS的基本操作
2018-05-02 21:47 941-mkdir 在HDFS创建目录 ... -
一个不错的开源工具类,专门用来解析日志头部的,好用
2018-05-02 20:00 772一个不错的开源工具类,专门用来解析日志头部的,好用。 http ... -
介绍个不错的RESTFUL MOCK的工具wiremock
2018-04-27 21:02 1907介绍个不错的RESTFUL MOCK的工具wiremock,地 ...
相关推荐
从Struts2.3.16升级到Struts2.5.13是一个重要的步骤,因为这涉及到安全性改进、性能优化以及新特性的引入。以下是升级过程中涉及的关键知识点: 1. **安全更新**:Struts2.5系列引入了大量安全修复,包括针对已知...
Struts2.3.16可能会包含新的插件或者对旧插件的升级。 6. **依赖库(lib)**:压缩包中的"lib"目录包含了Struts2运行所需的第三方库,如Apache Commons库、Servlet API等。这些库为Struts2提供了必要的功能支持,...
Struts2.3.16的必须的9个jar包 Struts2在eclipse中的详细配置(图文解析):http://www.cnblogs.com/MartinLi841538513/articles/3597182.html
Struts2是一款基于MVC(Model-View-Controller)设计...总的来说,Struts2.3.16最小依赖包为开发者提供了一个轻量级的起点,帮助他们快速地开始基于Struts2的Web应用开发,但同时也需要注意版本的兼容性和安全性问题。
这个漏洞存在于所有Struts 2版本低于2.3.14的系统中,因此,对于使用这些早期版本的用户来说,升级到2.3.16变得至关重要,以防止可能的安全威胁。 Struts 2框架的核心组件包括: 1. **Action**:这是业务逻辑处理...
为了解决上述安全问题,最有效的方式是升级Struts版本至最新发布的安全版本。以下是升级到Struts2.3.32版本的详细步骤: 1. **替换JAR包**: - **旧版本**: - freemarker-2.3.19.jar - ognl-3.0.6.jar - ...
Struts2.3.16是该框架的一个稳定版本,改进了之前版本的一些问题,提供了更多的特性与插件支持,例如拦截器、结果类型和国际化等。 接下来是Spring框架,Spring4.05版本在依赖注入、AOP(面向切面编程)和事务管理...
Struts2.3.16版本在前一版本的基础上进行了优化和bug修复,增强了框架的安全性和稳定性。它支持多种视图技术,如JSP、FreeMarker和Velocity,同时提供强大的表单验证和国际化功能。 Hibernate4作为对象关系映射...
- **社区支持**:参与Struts2的论坛和社区,获取关于升级问题的帮助和建议。 - **自动化工具**:使用自动化工具(如OWASP Dependency Check)检查项目的依赖项,以识别已知的漏洞。 总之,升级Struts2是为了增强...
具体到struts-2.3.16版本,这是Struts2的一个稳定版本,包含了多个组件和修复的bug,旨在提供更高效、更安全的开发环境。 核心jar包是Struts2框架的基础,主要包括以下几个关键组件: 1. **struts2-core.jar**:这...
项目原型:Struts2.3.16 + Spring4.1.1 + Hibernate4.3.6 二、 项目目的: 整合使用最新版本的三大框架(即Struts2、Spring4和Hibernate4),搭建项目架构原型。 项目架构原型:Struts2.3.16 + Spring4.1.1 + ...
总之,Struts2漏洞升级包是为了帮助用户应对Java Struts2框架中的安全问题,通过升级到包含安全补丁的新版本,避免遭受恶意攻击。在使用过程中,务必遵循正确的升级步骤,并结合安全测试和日志监控,以确保Web应用的...
本人一直用这架包开发. 绝对不会出错.适用于集成struts2开发.
- freemarker-2.3.16.jar - struts2-core-2.2.1.jar - struts2-spring-plugin-2.2.1.jar 配置完成后,你需要在Spring配置文件中声明Hibernate SessionFactory,并在Struts2配置文件中定义Action类。同时,别忘了在...
此外,它依赖于OGNL(Object-Graph Navigation Language)进行表达式语言处理,`ognl-3.0.1.jar`用于字段类型转化等功能,`freemarker-2.3.16.jar`则作为模板技术,处理视图展示。 2. Spring:Spring主要负责业务...