`
sw1982
  • 浏览: 511250 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

小心Commons fileupload攻击[更新]

阅读更多

1.这种攻击不会出现在BS的应用中,因为要从web页面模拟攻击比较累。而CS程序则天生可能会隐藏这种问题。

 

2.经过认真的跟进,最终发现问题出在sizeThreshold 这个参数上。

 

让人费解的来由是:

org.apache.commons.fileupload.FileUploadBase这个基类351行,解析request调用了

 

OutputStream os = item.getOutputStream();

 

跟进去看方法实现:

    public OutputStream getOutputStream()
        throws IOException {
        if (dfos == null) {
            File outputFile = getTempFile();
            dfos = new DeferredFileOutputStream(sizeThreshold, outputFile);
        }
        return dfos;
    }

 再进去看getTempFile,发现这里创建了文件

 

    protected File getTempFile() {
        File tempDir = repository;
        if (tempDir == null) {
            tempDir = new File(System.getProperty("java.io.tmpdir"));
        }

        String fileName = "upload_" + UID + "_" + getUniqueId() + ".tmp";

        File f = new File(tempDir, fileName);
        FileCleaner.track(f, this);
        return f;
    }

 

也就是只要使用了fileupload组件,就会走到 getTempFile,就会创建临时文件。而文档中提到的sizeThreshold根本无用(确实整个代码跟进的过程中,sizeThreshold都没有使用到)

 

 

那么真实情况如何?

 

1.下面这句并不会真的在磁盘创建文件。。也是久疏基础知识,让自己的推理陷入了误区。

File f = new File(tempDir, fileName);

 2.sizeThreshold这个参数(The threshold above which uploads will be stored on disk.)起作用的地方并不在common.fileupload这个项目中,而是上面getOutputStream这段代码中,将这个参数传到了common.io这个项目中的实现类。也就是项目依赖。

 dfos = new DeferredFileOutputStream(sizeThreshold, outputFile);

 

 

 

-------------------------原帖分界线----------------------------------

最近搞人的一桩事情:

 

 

严重: Socket accept failed
java.net.SocketException: Too many open files
	at java.net.PlainSocketImpl.socketAccept(Native Method)
	at java.net.PlainSocketImpl.accept(PlainSocketImpl.java:384)
	at java.net.ServerSocket.implAccept(ServerSocket.java:453)
	at java.net.ServerSocket.accept(ServerSocket.java:421)
	at org.apache.tomcat.util.net.DefaultServerSocketFactory.acceptSocket(DefaultServerSocketFactory.java:61)
	at org.apache.tomcat.util.net.JIoEndpoint$Acceptor.run(JIoEndpoint.java:310)
	at java.lang.Thread.run(Thread.java:619)

 

排查很久才发现,竟然是文件上传这个地方的问题。无论有意还是恶意,都会让人恼火。

 

有些客户端故意使用multi-part封装全部参数, 比如"abc=111"的普通参数,经过包装后post,成了multi-part。 这样就绕过Jakarta Commons Fileupload的判断逻辑:

 

具体的恶劣方式如下:

1.给一个request带上20+个参数,全部变成mutiparty+ post提交。给服务器带来大量的临时文件创建、删除压力。

2.大量的请求耗时较长的接口。当linux下文件句柄消耗完, 服务停止响应。

 

 

可考虑的解决方式??

1.限制上传文件的类型, 非常有必要.

2.升级commons.fileupload 到1.2+,后面的版本有提供新的接口处理这个bug

3.改造MultiPartRequest,根据业务限制每个request带的FileItem个数。基本限制到1-2个即可。超出立即丢弃。

  • 大小: 14.2 KB
分享到:
评论

相关推荐

    开发工具 commons-fileupload-1.3.2

    开发工具 commons-fileupload-1.3.2开发工具 commons-fileupload-1.3.2开发工具 commons-fileupload-1.3.2开发工具 commons-fileupload-1.3.2开发工具 commons-fileupload-1.3.2开发工具 commons-fileupload-1.3.2...

    Apache Commons FileUpload 1.3.2 released

    Commons FileUpload 1.3.2. The Apache Commons FileUpload component provides a simple yet flexible means of adding support for multipart file upload functionality to servlets and web applications. ...

    commons commons-fileupload历史版本jar包集合

    commons commons-fileupload历史版本jar包集合,包括src源码 附件列表: commons-fileupload-1.0.zip commons-fileupload-1.1.1.zip commons-fileupload-1.1.zip commons-fileupload-1.2.1-bin.zip commons-...

    commons-fileupload-1.4-API文档-中文版.zip

    赠送jar包:commons-fileupload-1.4.jar; 赠送原API文档:commons-fileupload-1.4-javadoc.jar; 赠送源代码:commons-fileupload-1.4-sources.jar; 赠送Maven依赖信息文件:commons-fileupload-1.4.pom; 包含...

    commons fileupload

    Commons FileUpload是Apache组织提供的一款强大的Java文件上传处理组件,常用于Web应用中处理用户通过表单上传的文件。在Web开发中,尤其是在涉及到用户上传照片、文档等大文件时,FileUpload组件提供了方便、高效的...

    commons-fileupload-1.3.3.zip

    Apache Struts2 Commons FileUpload反序列化远程代码执行漏洞安全公告 安全公告编号:CNTA-2018-0029 2018年11月7日,国家信息安全漏洞共享平台(CNVD)收录了Apache Struts2 Commons FileUpload反序列化远程代码...

    commons-fileupload-1.4-bin.zip

    6. **安全性考虑**:使用FileUpload时,需要注意文件上传的安全隐患,如防止恶意文件上传、限制上传文件类型和大小、避免路径遍历攻击等。这些可以通过设置合适的验证规则和过滤机制来实现。 7. **性能优化**:为了...

    Apache Commons FileUpload jar

    Apache Commons FileUpload jar Apache Commons FileUpload jar Apache Commons FileUpload jar

    commons-fileupload-1.3.2jar包和commons-io-2.5jar包.zip

    Apache Commons FileUpload与Apache Commons IO是Java开发中处理文件上传和I/O操作的重要库。这两个库在处理Web应用,特别是基于JSP(JavaServer Pages)的文件上传功能时,扮演着核心角色。在这个主题中,我们将...

    commons-fileupload-1.3.3-API文档-中文版.zip

    赠送jar包:commons-fileupload-1.3.3.jar; 赠送原API文档:commons-fileupload-1.3.3-javadoc.jar; 赠送源代码:commons-fileupload-1.3.3-sources.jar; 赠送Maven依赖信息文件:commons-fileupload-1.3.3.pom;...

    commons-fileupload和commons-io的jar包

    Apache Commons FileUpload与Apache Commons IO是Java开发中两个非常重要的库,它们主要用于处理文件上传和I/O操作。这两个库在Web应用、数据处理以及文件管理等领域广泛应用。 Apache Commons FileUpload库是一个...

    commons-fileupload-1.3.1.jar

    Apache Commons FileUpload库简化了这一过程,提供了高效且灵活的文件上传解决方案。 Apache Commons是Apache软件基金会的一个项目集合,它提供了许多实用工具类和组件,用于解决Java编程中的常见问题。"commons...

    commons-fileupload-1.4 jar包.rar

    《Apache Commons FileUpload详解》 在Java开发中,处理用户上传文件是一项常见的任务。Apache Commons FileUpload组件就是为了解决这一问题而设计的,它提供了一套完整的解决方案,使得开发者可以方便、高效地处理...

    commons-fileupload-1.2.2

    commons-fileupload-1.2.2commons-fileupload-1.2.2commons-fileupload-1.2.2commons-fileupload-1.2.2commons-fileupload-1.2.2commons-fileupload-1.2.2commons-fileupload-1.2.2commons-fileupload-1.2.2commons-...

    Jakarta Commons FileUpload 用户指南

    ### Jakarta Commons FileUpload 用户指南知识点总结 #### 一、FileUpload 概览 - **Jakarta Commons FileUpload** 是一个用于处理HTTP文件上传的Java库,它基于**RFC1867**标准来解析和处理文件上传请求。 - **...

    commons-fileupload-1.3.3-bin.tar.gz

    3. **文件大小限制**:为了防止DoS攻击,FileUpload允许开发者设置上传文件的最大大小,超过此限制的文件会被自动拒绝。 4. **文件名处理**:当用户上传文件时,原始文件名可能包含不安全或不合法的字符。...

    commons-fileupload及源码

    在这个压缩包中,包含了`commons-fileupload-1.3.1-sources.jar`和`commons-fileupload-1.3.1.jar`两个文件,前者提供了源代码,后者是编译后的类库文件。 FileUpload组件的核心功能是解析HTTP请求中的多部分数据...

    commons-fileupload-1.3.3-bin

    Apache Commons是Apache软件基金会的一个项目,致力于提供高质量的Java组件,而FileUpload就是其中的一个组件。 在Web开发中,文件上传通常是一个复杂的过程,涉及到多个步骤和潜在的问题,如文件大小限制、多部分...

    commons-fileupload-1.3.jar和commons-io-1.2.jar.zip

    在这个场景中,我们关注的是"commons-fileupload-1.3.jar"和"commons-io-1.2.jar"这两个文件,它们被打包在一个名为"commons-fileupload-1.3.jar和commons-io-1.2.jar.zip"的压缩文件中。 **Apache Commons ...

    commons-fileupload-1.3.2.jar

    这个"commons-fileupload-1.3.2.jar"是该库的1.3.2版本,它支持Java Development Kit (JDK) 1.5及以上版本。在本文中,我们将深入探讨Apache Commons FileUpload库的核心功能、特性以及如何在实际项目中使用它。 ...

Global site tag (gtag.js) - Google Analytics