昨天,在发完《Spring官宣承认网传大漏洞,并提供解决方案》之后。群里好几个小伙伴提出了这样的问题:我们的Spring版本比较老,怎么办?这是个好问题,今天DD就单独说一说。此次RCE漏洞公布后,官方主要解决方案是升级版本,但只有Spring5.2、5.3和SpringBoot2.5、2.6提供了相应的升级版本。那么一些仍在使用Spring5.0、5.1甚至Spring4.x,或者SpringBoot1.x和Spring2.4及以下版本的用户应该怎么办?第一个方法官方给出了一个扩展RequestMappingHandlerAdapter的方法。同时也给出了在SpringBoot下使用SpringMVC的实现方案。如果是WebFlux,可以稍微修改一下。但是如果不是SpringBoot,Bean的初始化方法又需要改一下。@SpringBootApplicationpublicclassMyApp{publicstaticvoidmain(String[]args){SpringApplication.run(CarApp.class,args);}@BeanpublicWebMvcRegistrationsmvcRegistrations(){returnnewWebMvcRegistrations(){@OverridepublicRequestMappingHandlerAdaptergetRequestMappingHandlerAdapter(){returnnewExtendedRequestMappingHandlerAdapter();}};}privatestaticclassExtendedRequestMappingHandlerAdapterextendsRequestMappingHandlerAdapter{@OverrideprotectedInitBinderDataBinderFactorycreateDataBinderFactory(Listmethods){返回新的ServletRequestDataBinderFactory(methods,getWebBindingInitializer()){@OverrideprotectedServletRequestDataBindercreateBinderInstance(Objecttarget,Stringname,NativeWebRequestrequest)ServletRequestDataBinderbinder=super.createBinderInstance(target,name,request);字符串[]字段=binder.getDisallowedFi字段();ListfieldList=newArrayList<>(fields!=null?Arrays.asList(fields):Collections.emptyList());fieldList.addAll(Arrays.asList("class.*","Class.*","*.class.*","*.Class.*"));binder.setDisallowedFields(fieldList.toArray(newString[]{}));退货活页夹;}};}}}这个我们需要修改代码。其实我觉得还是有点麻烦。如果不熟悉Spring机制,可能会遇到很多麻烦。再说一个方便的方法,也是我推荐给老项目的方法。第二种方法下面要讲的方法主要是逃避的思路。什么是规避?就是对这个漏洞的利用条件做一些调整。比如这个漏洞的条件如下:JDK9+DeploymentusingApacheTomcat使用WAR打包依赖spring-webmvc或者spring-webflux那么我就可以选择避开其中一个条件来防止漏洞被利用,如:降级到JDK8,使用Undertow部署。如果是SpringBoot的早期项目,也可以调整打包方式,使用JAR的方式打包运行来避免。另外DD注意到这个漏洞之后Tomcat的版本也进行了更新,所以大家在使用WAR部署的时候直接下载最新版本的Tomcat来规避也是一个不错的选择。好了,今天的分享就到这里。解决群友(点击加群)的问题是一方面,另一方面也是解决问题的一种思路。有时候遇到困难的问题,我们不必强硬。从另一个方向解决它们可能更划算。如果觉得今天的分享还不错,欢迎点赞、观看、转发朋友圈。欢迎来到我的公众号:程序员DD。第一时间了解行业前沿资讯,分享深度技术干货,获取优质学习资源