`

struts2安全问题

 
阅读更多
问题:
Struts 2 Action对象为每一个请求产生一个实例,因此没有线程安全问题。
Spring的Ioc容器管理的bean默认是单实例的,上一次请求处理的状态信息被保持下来,并影响了下一次的请求,实际上就是Action中的类变量被不同的请求读取,出现错误结果

解决:就是不用单例, spring中bean的作用域设为prototype,每个请求对应一个实例.

1、Struts1
Struts1是单例模式,也就是所,Web容器(例如:Tomcat)启动的时候,就会实例化一个Action对象,那么所有请求都是用的这个对象。所以当遇到2个请求并发的时候,那么其实他们调用的是同一个类,这个时候当你在Action内部定义属性的时候,就会产生线程同步的问题。
例如:
你在Action定义了一个 int i = 0;
然后在这个Action里面的某一个方法里面对这个i进行操作。当并发的时候就会遇到问题。
所以:我们在用struts1的时候不能在action里面定义属性。要用到只的话只能在方法里面定义。
2、struts2
Struts 2 Action对象为每一个请求产生一个实例,因此没有线程安全问题。所以我们可以在Struts2的Action里面去定义属性。但是Struts2由于 Action和普通的Java类没有任何区别(也就是不用像Struts1里面那样去实现一个Struts的接口,有兴趣的朋友可以自己去了解),所以我们可以用Spring去管理Struts2的Action,这个时候我们就要注意了,因为当我们在spring里面去定义bean的时候,spring默认用的是单例模式。所以在这个时候,你就要修改Spring的配置文件---即修改scope为prototype。
为什么struts1中并没有考虑到线程问题,因为所有的代码都是写在execute的方法中,所有变量都是定义在里面,所以没有线程安全问题。
而现在的struts2就不一样了。struts2的action中就像一个POJO一样,定义了很多的类变量。这就有线程安全问题了。。此时,就使用scope=prototype来指定是个原型模式,而不是单例,这样就解决了线程安全问题。每个线程都是一个新的实例。。

但是,线程同步是不得以的方法,是比较复杂的,而且会带来性能的损失。等效的代码中,不需要同步在编写容易度和性能上会更好些。
我这里强调的是什么代码是始终为线程安全的、是不需要同步的。如下:
1)常量始终是线程安全的,因为只存在读操作。
2)对构造器的访问(new 操作)是线程安全的,因为每次都新建一个实例,不会访问共享的资源。
3)最重要的是:局部变量是线程安全的。因为每执行一个方法,都会在独立的空间创建局部变量,它不是共享的资源。局部变量包括方法的参数变量。
struts user guide里有:
Only Use Local Variables - The most important principle that aids in thread-safe coding is to use only local variables, not instance variables , in your Action class.
译:只使用用局部变量。--编写线程安全的代码最重要的原则就是,在Action类中只使用局部变量,不使用实例变量。
分享到:
评论

相关推荐

    Struts2漏洞检查工具2018版.rar

    这个工具可能包含了针对那时已知的Struts2安全问题的扫描功能,帮助系统管理员和开发者识别并修复潜在的安全风险。 描述中提到的"Struts2各版本漏洞扫描利用工具"表明该工具不仅能够扫描Struts2应用的漏洞,还可能...

    Struts2安全缺陷

    Struts2 安全缺陷 Struts2 是一个流行的 Java WEB 框架,它提供了许多有用的功能来帮助开发者快速构建 Web 应用程序。然而,在开发和学习 Struts2 时,开发者需要注意一些安全缺陷,以避免安全漏洞。 Struts2 框架...

    Struts2漏洞检查工具Struts2.2019.V2.3

    "Struts2漏洞检查工具Struts2.2019.V2.3"是一个专门针对这些漏洞进行检测的工具,旨在帮助开发者和网络安全专业人员识别并修复Struts2框架中的安全问题。 Struts2的安全漏洞主要包括以下几类: 1. OGNL(Object-...

    struts2-scan_struts2-scan_struts2scan_scan_struts2漏洞_

    5. 开发过程中采用静态代码分析工具,及早发现潜在的安全问题。 总的来说,Struts2漏洞的检测和预防是保障Web应用安全的重要环节,"struts2-scan"这样的工具为这个过程提供了有力的支持。通过深入了解这些漏洞和...

    Struts终极漏洞利用工具及代码

    总的来说,这个压缩包提供了一个深入研究Struts2安全问题的窗口,但同时也需要谨慎对待,确保安全操作,防止恶意利用。通过学习这些内容,开发者和安全专家能够提高他们的安全素养,为企业信息系统筑起更坚固的防护...

    Apache的Struts2框架严重安全漏洞

    Apache Struts2 是一个流行的Java Web开发框架,它为开发者提供了构建MVC(Model-View-Controller)架构的工具和便利。然而,Struts2框架在过去曾曝出一系列的安全漏洞,其中最严重的一种允许攻击者通过HTTP请求直接...

    Struts2 安全漏洞解决方法

    Struts2 安全漏洞解析,距离上个版本发布仅仅过去1周,apache struts官网又发布struts2最新版本安全公告,主要修复了一个漏洞,代号S2-022:从漏洞简要描述来看,确定是对之前S2-021的补充。

    struts2安全漏洞修复

    一、Struts2安全漏洞概述 1. CVE-2017-5638(Struts2 S2-045):这是一个严重影响的远程代码执行漏洞,它允许攻击者通过恶意构造的HTTP请求头来执行任意代码。该漏洞是由于OGNL(Object-Graph Navigation Language...

    全网最全Struts 2 全版本漏洞检测工具,最新struts漏洞更新

    Struts 2的安全问题主要源于其OGNL(Object-Graph Navigation Language)表达式语言的使用,这种语言允许动态执行代码,如果未经适当过滤,可能导致远程代码执行(RCE)攻击。其中,最著名的漏洞是CVE-2017-5638,也...

    K8 Struts2 Exp 20160516(Struts2综合漏洞利用工具)

    然而,随着其广泛应用,安全问题也逐渐凸显,其中最为知名的便是Struts2漏洞。在2016年5月16日,一个名为“K8 Struts2 Exp 20160516”的综合漏洞利用工具被发布,这标志着Struts2框架中存在严重的安全风险。 **...

    留言板留言板struts2留言板struts2

    11. **安全考虑**:Struts2虽然强大,但也需要注意安全性问题,例如XSS、CSRF等。开发者应确保对用户输入进行校验和过滤,使用安全的插件,及时更新Struts2版本以修补潜在的安全漏洞。 以上就是关于"留言板留言板...

    struts2 Https 配置

    Struts2是一个非常流行的Java Web框架,用于构建和维护可扩展、模块化且易于管理的企业级应用程序。在当今网络安全日益重要的环境下...通过这些步骤,可以确保基于Struts2的Web应用在传输敏感数据时具有较高的安全性。

    struts2项目开发

    Struts2 项目开发 Struts2 是一个基于 Java Web 的框架,广泛应用于 Web 应用程序的开发。下面将从 Struts2 项目开发的角度,详细介绍 Struts2 框架的应用、开发流程、技术架构、实践经验等方面的知识点。 项目...

    struts1和struts2的区别

    - **Struts2**: Struts2中的Action更像是工厂模式下的产品,每个Action实例都是线程安全的。Struts2提供了ActionSupport基类来简化Action的实现。Action本身可以是任何实现了特定接口的Java对象,甚至是普通的POJO。...

    struts2 最新漏洞 S2-016、S2-017修补方案 .docx

    最近,Struts2 发生了两个严重的漏洞,分别是 S2-016 和 S2-017,这两个漏洞可能会导致攻击者执行恶意代码,从而危害到网站的安全。 S2-016 漏洞是由于 Struts2 的 Ognl 表达式语言解析器存在缺陷,从而导致攻击者...

    struts2的各种jar包

    10. **插件系统**:Struts2的插件机制使得扩展和定制变得容易,比如Spring插件可以实现依赖注入,i18n插件处理国际化问题。 11. **开发工具集成**:Eclipse、IntelliJ IDEA等IDE都有Struts2的插件,可以帮助开发者...

    Struts2漏洞检查工具2018版.zip

    然而,随着广泛的应用,Struts2也暴露出一些安全问题,其中最著名的是Struts2远程代码执行漏洞,这可能导致恶意攻击者完全控制受影响的服务器。 2018年,针对Struts2的安全漏洞,出现了多个重要的更新和补丁。...

    Struts2+Jquery+Ajax

    Struts2是一个强大的Java web应用程序开发框架,它基于Model-View-Controller(MVC)设计模式,用于构建可维护性高、结构...在实际开发过程中,还需要关注安全问题,如Struts2的安全漏洞,确保应用的稳定性和安全性。

    struts2-showcase.rar

    10. **S2-005安全漏洞**:Struts2-showcase还包含了一些已知的安全漏洞实例,用于教育开发者如何避免和修复这些漏洞。 通过深入研究和分析struts2-showcase项目,开发者能够全面了解Struts2的特性和最佳实践,从而...

    浅谈struts2安全

    在Struts2的安全问题中,主要包括以下几个方面: 1. **参数注入**:由于Struts2允许通过Action类的属性接收用户输入,如果没有进行适当的验证和过滤,可能导致参数注入攻击。例如,恶意用户可以通过构造特定的URL或...

Global site tag (gtag.js) - Google Analytics