파일 업로드 취약점

사진을 업로드 할 때 1, 일부 사진은 트로이 목마 파일이 될 사진의 접미사 확장을 변경할 수 있습니다. . . 당신은 사진인지, 파일 스트림을 결정해야

@WebServlet ( "/로드 / UploadServelt은" )
 공공  클래스 에서 UploadServelt가 확장 HttpServlet을 { 

    / ** 
     *文件上传
     * / 
    보호  무효 의 doPost (HttpServletRequest 요청, HttpServletResponse 응답) { 
        문자열 루트 = request.getServletContext (). getRealPath ( "/ 업로드" ); 
        DiskFileItemFactory 공장 = 새로운 DiskFileItemFactory (); 
        ServletFileUpload 업로드 = 새로운 ServletFileUpload (공장);
        시도 { 
            목록 <FileItem> 목록 = upload.parseRequest (요청);
            대한 합니다 (FileItem IT : 목록) {
                 // 파일이 파일 형식 인 경우 
                IF (! it.isFormField ()) {
                     // 파일 타입의 fileType = getFileType (it.getInputStream ());
                     // IF (의 fileType == NULL) {
                     / /  // 비 이미지 형식
                     // . response.getWriter () 쓰기 ( "실패는");
                     // 반환;
                     // }
 //                     문자열 imgValue fileType.getValue = ();
 //                     에서 System.out.println ( "imgValue : "+ imgValue는);
                     // 그림 형식입니다
                    it.write (  파일 (루트 + "/"+ it.getName ())); 
                    . response.getWriter () (쓰기 "성공" ); 

                } 
            } 
        } 캐치 (예외 전자) {
             시도 { 
                response.getWriter ()를 쓰기 (. "예외" ); 
            } 캐치 (IOException이 된 E1) { 
                e1.printStackTrace (); 
            } 
            e.printStackTrace (); 
        } 
    } 

    // 判断文件是图片格式
    공공  정적 에 FileType getFileType (의 InputStream이다)슬로우 IOException이 {
         바이트 [] SRC = 새로운  바이트 [28 ]; 
        is.read (SRC, 0, 28 ); 
        모두 StringBuilder의 StringBuilder =  의 StringBuilder ( "" );
        경우 (SRC ==  || src.length <= 0 ) {
             반환  ; 
        } 
        에 대해 ( int로 I = 0; I <src.length은, 내가 ++ ) {
             INT의 V SRC = [I]은 0xFF ; 
            문자열 HV = 는, Integer.toHexString (V) .toUpperCase ();
            만약(hv.length () <2 ) { 
                stringBuilder.append ( 0 ); 
            } 
            stringBuilder.append (HV); 
        } 
        에 FileType []의 파일 형식 =의 FileType.values ();
        대한 (에 FileType의 fileType : 파일 형식) {
             경우 (. stringBuilder.toString () startsWith은 (fileType.getValue은 ())) {
                 반환 의 fileType을; 
            } 
        } 
        반환  널 (null)을 ; 
    } 

}

 

추천

출처www.cnblogs.com/pickKnow/p/11266743.html