langhua9528
2008-11-15 13:11
浏览 213
已采纳

JAVA上传文件服务器端验证的问题?

[img]/upload/attachment/50203/6e9c13e8-f97f-393d-8654-81bf94e32632.jpg[/img]
怎么在服务器端验证
1.文件大小?
2.文件后缀名?
但如果只有字符串验证后缀名的话,别人把JSP文件改成JPG文件之后上传过来之后,来访问这个JPG文件会不会运行JSP里面的代码呢

如果有人上传带病毒的JPG文件怎么办啊
怎么验证这些东西呢

周未没有人提问啊......

[b]问题补充:[/b]
但是别人上传了一张有病毒的JPG怎么办啊....
[b]问题补充:[/b]

怎么在服务器端验证
1.文件大小?
2.文件后缀名?
但如果只有字符串验证后缀名的话,别人把JSP文件改成JPG文件之后上传过来之后,来访问这个JPG文件会不会运行JSP里面的代码呢

如果有人上传带病毒的JPG文件怎么办啊
怎么验证这些东西呢

周未没有人提问啊......

问题补充:
但是别人上传了一张有病毒的JPG怎么办啊....
[b]问题补充:[/b]
javaeye有上传文件有杀毒模块没有?
[b]问题补充:[/b]
晕死了,服务器上还安杀毒软件的啊......

  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

8条回答 默认 最新

  • iteye_521 2008-11-15 13:26
    已采纳

    [quote]1.文件大小?[/quote]
    根据http消息头中的Content-length,一般上传类库如apache fileupload中都有相关API的。

    [quote]2.文件后缀名? [/quote]
    这个也只能这样,现在如果一个文件没有后缀连[color=red]window都无法智能识别[/color]它的内容是啥格式,何况是你的程序了。

    [quote]来访问这个JPG文件会不会运行JSP里面的代码呢 [/quote]
    这个你试试不就知道了吗,呵呵。

    [quote]如果有人上传带病毒的JPG文件怎么办啊 [/quote]
    难不成你还想给你的上传程序带一个病毒特征库??嘿嘿。写一个杀软模块儿??

    打赏 评论
  • diershao 2008-11-15 13:36

    [quote="langhua9528"]别人把JSP文件改成JPG文件之后上传过来之后,来访问这个JPG文件会不会运行JSP里面的代码呢 [/quote]
    这个问题一般不用担心。除非你没有约束raw jsp,允许直接访问jsp文件,否则所有*.jsp的请求都无法被接受。类似的,如果你没有配置*.jpg为一个servlet mapping url pattern的话,所有*.jpg的请求都只会被成当一个静态资源来处理。

    打赏 评论
  • diershao 2008-11-15 13:38

    [quote="langhua9528 "]问题补充:
    但是别人上传了一张有病毒的JPG怎么办啊.... [/quote]
    这个可以、也应该由服务器的杀毒软件来负责解决。

    打赏 评论
  • iteye_521 2008-11-15 13:47

    [quote]但是别人上传了一张有病毒的JPG怎么办啊.... [/quote]
    你服务器上的杀软啥干啥的啊,再说,一般服务器都是unix或linux的,怕啥病毒啊!

    打赏 评论
  • iteye_521 2008-11-15 13:48

    [quote]javaeye有上传文件有杀毒模块没有? [/quote]
    哈哈,哥们儿,我开个玩笑你还当真了啊!这个东西不可能实现的,要是你真能搞出杀毒模块儿,你可以直接搞杀毒软件卖钱了。

    打赏 评论
  • iteye_521 2008-11-15 13:54

    [quote]晕死了,服务器上还安杀毒软件的啊...... [/quote]
    如果你是linux或unix可以不安装,多数服务器也都是linux或unix的,比如javaeye就是SUSE Linux的。

    打赏 评论
  • liumy601 2008-11-17 10:45

    给你发段服务器处理上传文件的代码:
    String fileName = null;
    try{
    if(ServletFileUpload.isMultipartContent(request)){
    File saveDir = new File(getServletConfig().getServletContext().getRealPath("/uploads"));
    DiskFileItemFactory dff = new DiskFileItemFactory();
    //dff.setRepository(tmpDir);
    dff.setSizeThreshold(1024000);
    ServletFileUpload sfu = new ServletFileUpload(dff);
    sfu.setFileSizeMax(5000000);
    sfu.setSizeMax(10000000);
    FileItemIterator fii = sfu.getItemIterator(request);
    while(fii.hasNext()){
    FileItemStream fis = fii.next();
    if(!fis.isFormField() && fis.getName().length()>0){
    fileName = fis.getName().substring(fis.getName().lastIndexOf("\")+1);
    BufferedInputStream in = new BufferedInputStream(fis.openStream());
    BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(new File(saveDir.getPath()+"\"+fileName)));
    Streams.copy(in, out, true);
    }
    }
    PrintWriter out = response.getWriter();
    out.println("File upload successfully!!!
    ");
    out.println("Download");

    }

    }catch(Exception e){
    e.printStackTrace();
    }

    sfu.setFileSizeMax(5000000)限制了上传文件的大小
    fis.getName().substring(fis.getName().lastIndexOf(".")+1)返回的是文件后缀,加上这句就可以了。至于判断文件是否带病毒,本人无能为力。

    打赏 评论
  • lrg30067 2008-11-17 20:07

    每个文件头,都有文件类型,可以读到文件的具体类型标志,就可以判断用户上传的是不是图片了,不用判断后缀了,你可以文件头这方面的资料

    打赏 评论

相关推荐 更多相似问题