`
bobshute
  • 浏览: 284114 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

fileupload渗透分析(org.apache.commons.fileupload渗透分析)

    博客分类:
  • j2se
阅读更多
fileupload渗透分析(org.apache.commons.fileupload渗透分析)

 

 

 

 

package com.zy.service;   
  
import java.io.File;   
import java.io.IOException;   
import java.io.PrintWriter;   
import java.util.Iterator;   
import java.util.List;   
  
import javax.servlet.ServletException;   
import javax.servlet.http.HttpServlet;   
import javax.servlet.http.HttpServletRequest;   
import javax.servlet.http.HttpServletResponse;   
  
import org.apache.commons.fileupload.FileItem;   
import org.apache.commons.fileupload.FileUploadException;   
import org.apache.commons.fileupload.disk.DiskFileItemFactory;   
import org.apache.commons.fileupload.servlet.ServletFileUpload;   
  
public class UpFileProcessServlet extends HttpServlet {   
  
public void doGet(HttpServletRequest request, HttpServletResponse response)   
    throws ServletException, IOException {   
  
   response.setContentType("text/html");   
   request.setCharacterEncoding("utf-8");   
   this.FileUpCenter(request, response);//调用文件上传中心类   
          
           
      }   
        
     /*文件上传中心类*/  
        private void FileUpCenter(HttpServletRequest request,HttpServletResponse response){   
           /*  
            * 1.处理文件 上传 首先要 创建ServletFileUpload类的实例  
            * */  
            ServletFileUpload upload=new ServletFileUpload();   
            /*  
             * 2.设置整个请求最大值,默认为-1(表示没有上限)  
             * */  
            upload.setSizeMax(-1);   
            /*  
             * 3.设置单个文件的大小 10M 默认为-1(没有上限)  
             * */  
            upload.setFileSizeMax(1024*1024*10);   
            /*  
             * 4.设置上传的临时数据(某一个数据在上传中被保存的数据) 在内存中 的大小  
             * */  
                    //1.创建[文件项目]的工厂_友情提示:如果用DiskFileUpload处理文件上传 可不用创建该工厂          
                      DiskFileItemFactory diskFileItemFactory=new DiskFileItemFactory();   
                   //2.设置 内存缓存 默认为(10240)10k 咱们设置为5K   
                       diskFileItemFactory.setSizeThreshold(1024*5);   
                    //3.设置超过缓存部分的 数据 存储目录 该目录默认为:C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\   
                        //咱们设置为当前应用上下文的/upload/temp路径   
                           diskFileItemFactory.setRepository(new File( this.getServletContext().getRealPath("/upload/temp")));   
                       //4.把改工厂设置到upload使其具有以上属性   
                           upload.setFileItemFactory(diskFileItemFactory);   
                /*  
                 * 5.设置监听器 用于监听文件的上传情况(方便结合ajax与进度条 的使用)  
                 * */          
                           //如:upload.setProgressListener(pListener);   
                /*  
                 * 6.解析数据 解析请求中的数据 (主要是创建FileItem)  
                 * */    
                       List fileItems=null;      
                    try {   
                 fileItems=upload.parseRequest(request);   
       /*分析:该方法首先创建了ServletRequestContext的实例  
       *       然后从请求对象中获取了 字符集|编码|请求的总大小|输出流  
       *       然后创建了其内部类FileItemIteratorImpl,  
       *          该类负责检查字符集是否合法|请求总大小是否大于自定义的总大小,  
       *          如果超过会抛一个SizeLimitExceededException异常 等  
       *          这个内部类的主要作用就是对文件数据的一些判断 如name名称 等   
       *       然后经过一些复杂的周折,它会通过请求总大小,nam属性名称,文件名,和是否是file类型来创建FileItem的示例以及通过Streams的copy方法来传递一些输入输出流  
       * */  
        } catch (FileUploadException e) {   
       e.printStackTrace();   
        }   
       /*  
        * 7.一切准备工作做好了,咱们就开始处理每个表单的单个字段(当然如果你就上传一个文件 只有一个表单可以处理 呵呵)  
        * */  
         //1.首先创建一个迭代器Iterator i = fileItems.iterator();   
        Iterator i = fileItems.iterator();   
       //2.迭代 取出每一个FileItem进行分析   
        while (i.hasNext())    
            {   
                FileItem fi = (FileItem) i.next();   
                //3.isFormField方法用于判断FileItem类对象封装的数据是否属于一个普通表单字段,还是属于一个文件表单字段,如果是普通表单字段则返回true,否则返回false。   
                if (!fi.isFormField())//取反    
                {   
                        try    
                        {   
                      //4.通过getName()方法取表单中name属性对应的文件名   
                               //注:只要表单中只要设置了name属性,即便没有上传任何东西 该表单仍然对应一个FileItem对象 只是name为空。所以要对getName() 的值进行非空判断   
                          String pathThatSrc = fi.getName();   
                          if(pathThatSrc.trim().equals(""))   
                          {   
                              continue;   
                          }   
                          int start = pathThatSrc.lastIndexOf(File.separator);//通过"\\"截取索引的下标位置   
                          String fileName = pathThatSrc.substring(start + 1);//把下标位置+1的下标开始截取文件名(再补充一下昂,如果你上传的是中文文件名的文件 最后传到服务器上会变成乱码 也许要修改源码才可以解决)推荐 使用 UUID 来作为文件名称     
                          File bulidFile = new File(this.getServletContext().getRealPath("/upload/filedir"), fileName);//通过目录 和 文件名 创建File对象 你还可以对该File进行存在与否的判断       
                         //5.写入文件   
                          fi.write(bulidFile);   
                          String fieldName = fi.getFieldName();   
                          request.setAttribute(fieldName, fileName);   
                        }   
                     catch (Exception e)    
                     {   
                             e.printStackTrace();   
                             return;   
                     }   
                     finally  
                     {   
                         fi.delete();//无论是否出现异常 都要去清理临时 文件夹 里的数据   
                     }   
         
                }//if end   
  
            }//while end   
  
        }//class end   
  
  
  
public void doPost(HttpServletRequest request, HttpServletResponse response)   
    throws ServletException, IOException {   
             this.doGet(request, response);   
}   
  
}  

 

 

 

原文地址:http://celerity.iteye.com/blog/295528

分享到:
评论

相关推荐

    com.springsource.org.apache.commons.fileupload-1.2.0.jar

    spring mvc 上传需要的jar包 com.springsource.org.apache.commons.fileupload-1.2.0.jar com.springsource.org.apache.commons.io-1.4.0.jar

    com.springsource.org.apache.commons.fileupload-1.2.1.jar

    com.springsource.org.apache.commons.fileupload 自己打入本地Jar包即可

    利用org.apache.commons.fileupload上传多个文件

    import org.apache.commons.fileupload.servlet.ServletFileUpload; import org.apache.log4j.Logger; public class FileServlet extends HttpServlet { private static final long serialVersionUID = -...

    org.apache.commons相关的所以jar包

    org.apache.commons相关的所以jar包,包括commons-beanutils-1.8.0-bin.zip;commons-betwixt-0.8.zip;commons-cli-1.1.zip;commons-codec-1.3.zip;commons-collections-3.2.1-bin.zip;commons-digester-1.8.zip...

    org.apache.commons.fileupload.DiskFileUpload使用上

    `org.apache.commons.fileupload.DiskFileUpload` 是 Apache Commons FileUpload 模块中的一个类,主要用于处理 HTTP 请求中的文件上传。这个类实现了基于磁盘的文件上传存储策略,当上传文件大小超过内存阈值时,它...

    2018年org.apache.commons.io jar包

    项目中需要 org.apache.commons.io.IOUtils的可以下载此包,fileupload组件依赖的commons-io组件

    org.apache.commons 常用jar 以及部分源码

    commons-fileupload-1.2.1.jar commons-discovery-0.2.jar commons-digester-1.6.jar commons-dbcp-1.2.2.jar commons-collections-3.2.1.jar commons-codec-1.3.jar commons-chain-1.1.jar commons-beanutils-1.6....

    org.apache.commons jar包

    这个"org.apache.commons.jar"包是Apache Commons项目的一部分,其中包含了该目录下的一系列资源文件,确保了功能的完整性和多样性。 Apache Commons库的核心理念是创建一系列高质量的、独立的、实用的Java类库,...

    基于apache commons.fileupload的文件上传组件

    以下是一些关于Apache Commons FileUpload的关键知识点: 1. **多部分解析**:FileUpload库的核心功能是解析HTTP请求中的多部分数据。HTTP规范规定,文件上传通常通过“multipart/form-data”编码方式进行,...

    org.apache.commons.fileupload 文件上传至数据库

    标题“org.apache.commons.fileupload 文件上传至数据库”指的是使用Apache Commons FileUpload库将用户上传的文件存储到数据库中的技术。Apache Commons FileUpload是Apache软件基金会的一个开源项目,它提供了一个...

    org.apache.commons所有经典jar包收集

    org.apache.commons 的经典jar 包 commons-beanutils-1.8.0-bin、 commons-betwixt-0.8、 commons-cli-1.1、 commons-codec-1.3、 commons-collections-3.2.1-bin、 commons-digester-1.8、 commons-...

    org.apache.commons 系列的 JAR集合

    org.apache.commons 系列的 JAR集合,用以解决异常,包含内容如下: commons-cli-1.0 commons-codec-1.3 commons-collections-3.1 commons-dbcp commons-digester commons-discovery-0.2 commons-fileupload-1.2.1 ...

    org.apache.commons-fileupload-1.2.1.jar及上传文件的Demo

    标题中的"org.apache.commons-fileupload-1.2.1.jar"是该库的一个特定版本,1.2.1是它的版本号,表示它包含了从1.2.0到1.2.1之间的所有修复和改进。 Apache Commons FileUpload的工作原理基于Servlet规范中的多部分...

    基于apache commons.fileupload的文件上传组件,改进了上传速度

    apache commons.fileupload上传组件在上传文件时,在调用parseRequest方法时,先将输入流上传到服务器临时目录,在之后的文件处理过程中,再将临时目录下保存的文件复制到指定的目录,多了一道转储步骤。本实现抽取...

    org.apache.commons.fileupload-1.2.2

    java上传文件锁必须的jar包,org.apache.commons.fileupload-1.2.2.LIFERAY-PATCHED-1

    org.apache.commons.fileupload

    标题 "org.apache.commons.fileupload" 指的是Apache Commons FileUpload组件,这是一个Java库,专门用于处理HTTP协议中的文件上传功能。Apache Commons是Apache软件基金会的一个项目,它提供了许多Java编程中常用的...

    maven实现的commons-fileupload的demo

    在Java Web开发中,文件上传是一项常见的功能,Apache Commons FileUpload库是实现这一功能的强大工具。本示例将深入解析如何结合Maven构建一个基于Servlet的文件上传演示项目。Maven是一个项目管理工具,它可以帮助...

    orgapache_commons

    org.apache.commons的jar包,Apache Commons包含了很多开源的工具。 包括commons-beanutils-1.8.0-bin、commons-betwixt-0.8、commons-cli-1.1、commons-codec-1.3、commons-collections-3.2.1-bin、commons-...

    org.apache.commons旧版.jar

    org.apache.commons的压缩包,里面包含了beanutils、betwixit、cli、codec、collections、digest、discovery、email、fileupload、io、lang、net

Global site tag (gtag.js) - Google Analytics