使用Spring Boot和Tomcat 9.0.31进行多部分文件上传失败

7

在Spring Boot应用程序中进行多部分文件上传在Tomcat版本9.0.31中无法正常工作。但是,这个功能在较旧的版本9.0.30中可以很好地工作。但是,在这个版本中存在漏洞,被迫升级版本。请参见下面给出的错误。

 "timestamp": "2020-03-09T08:01:56.169+0000",
"status": 500,
"error": "Internal Server Error",
"message": "Failed to parse multipart servlet request; nested exception is java.io.IOException: org.apache.tomcat.util.http.fileupload.impl.IOFileUploadException: Processing of multipart/form-data request failed. Stream ended unexpectedly",

以下是错误日志

nested exception is org.springframework.web.multipart.MultipartException: Failed to parse multipart servlet request; nested exception is java.io.IOException: org.apache.tomcat.util.http.fileupload.impl.IOFileUploadException: Processing of multipart/form-data request failed. Stream ended unexpectedly] with root causeorg.apache.tomcat.util.http.fileupload.MultipartStream$MalformedStreamException: Stream ended unexpectedly

请帮忙解决这个问题。


我也遇到了与Tomcat 9.0.31版本相同的问题,但是在9.0.30版本中,它按预期工作,但在OWASP依赖项检查器中显示漏洞。 - viveknaskar
你是怎么得到那个错误的?我也遇到了同样的错误,但是却没有任何错误提示。 - yolob 21
3个回答

9

我认为最新的Tomcat 9.0.33版本已经修复了这个bug。

在升级后,之前无法正常工作的多部分文件上传功能也已经得到修复。另外,我尝试使用OWASP依赖检查器检查是否存在漏洞,并发现该版本中没有漏洞。

只需将依赖项升级到以下版本

<!-- https://mvnrepository.com/artifact/org.apache.tomcat.embed/tomcat-embed-core -->
<dependency>
    <groupId>org.apache.tomcat.embed</groupId>
    <artifactId>tomcat-embed-core</artifactId>
    <version>9.0.33</version>
</dependency>

很不幸,我在9.0.52版本中看到了这个错误! - vahid kh

8
这是Tomcat 9.0.31中的一个漏洞。Apache的Bugzilla里已经有了一篇文章:https://bz.apache.org/bugzilla/show_bug.cgi?id=64195
根据漏洞报告,为了避免出现这个问题,您可以选择: -使用Http11Nio2Protocol代替Http11NioProtocol -使用Tomcat 9.0.30,此版本没有该问题(但Tomcat的AJP协议中存在关键的Ghostcat漏洞)
该问题将在9.0.32中得到修复(尚未发布)。
注意:当使用http而非https时,该问题也不会出现。

使用Http11Nio2Protocol代替Http11NioProtocol <-- 这是一个救命稻草 - Jafar Zuabi

-1

另一个可能的解决方案是检查用户正在哪个Tomcat服务器上运行。

在我的情况下,它没有使用root用户运行。如果是这种情况,只需使用root用户重新启动Tomcat服务器即可解决问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接