ファイルのアップロードの脆弱性

写真をアップロードするとき1、、いくつかの写真は画像の接尾辞の拡張子を変更、トロイの木馬ファイルであってもよいです。あなたはそれが写真であるかどうか、ファイルストリームを決定する必要があります

@WebServlet( "/ロード/ UploadServlet" パブリック クラス UploadServletが延びているのHttpServlet { 

    / ** 
     *文件上传
     * / 
    保護された ボイドのdoPost(HttpServletRequestのリクエスト、HttpServletResponseの応答){ 
        文字列のルート = request.getServletContext()。getRealPath( "/アップロード" ); 
        DiskFileItemFactory工場 = 新しいDiskFileItemFactory(); 
        ServletFileUploadアップロード = 新しいServletFileUpload(工場)。
        試す{ 
            一覧 <FileItem>リストを= upload.parseRequest(リクエスト)。
            (FileItem IT:リスト){
                 // ファイルが、ファイルの種類がある場合には
                IF(!it.isFormField()){
                     // のFileTypeのfileType = getFileType(it.getInputStream());
                     // IF(のfileType == NULL){
                     / /  // 非画像フォーマット
                     // response.getWriter()( "失敗")を書く;
                     // 返す;
                     // }
 //                     文字列imgValue fileType.getValue =();
 //                     するSystem.out.println(「imgValue。 「+ imgValue);
                     //は画像形式であります
                    it.write(新しいファイル(ルート+ "/" + it.getName())); 
                    response.getWriter()、ライト(。 "成功" ); 

                } 
            } 
        } キャッチ(例外e){
             試みる{ 
                response.getWriter()書き込み( "例外"を)。
            } キャッチ(のIOExceptionのE1){ 
                e1.printStackTrace()。
            } 
            e.printStackTrace(); 
        } 
    } 

    // 判断文件是图片格式
    パブリック 静的のFileType getFileType(入力ストリームです)スローのIOException {
         バイト [] SRC = 新しい バイト [28 ]。
        is.read(SRC、 0、28 ); 
        StringBuilderのStringBuilderの = 新しい StringBuilderの( "" );
        もし(SRC == NULL || src.length <= 0 ){
             戻り ヌル
        } 
        のためにint型 i = 0; iはsrc.length <; iは++ ){
             int型 V = SRC [I]&0xFFで
            ストリングHV = Integer.toHexString(V).toUpperCase();
            もし(hv.length()<2 ){ 
                stringBuilder.append( 0 )。
            } 
            stringBuilder.append(HV)。
        } 
        のFileType [] fileTypesプロパティ = FileType.values()。
        {(fileTypesプロパティのFileTypeたfileType)
             場合(stringBuilder.toString()のstartsWith(fileType.getValue())){
                 返すたfileTypeと、
            } 
        } 
        戻り ヌル
    } 

}

 

おすすめ

転載: www.cnblogs.com/pickKnow/p/11266743.html