使用asp.net的FileUpload控件的安全风险或问题-以及建议的解决方案

使用asp.net的FileUpload控件的安全风险或问题-以及建议的解决方案,asp.net,file-upload,security,Asp.net,File Upload,Security,我必须创建一个实用程序,通过它,用户可以使用asp.net文件上载服务器控件上载单个或多个文件 我正在寻找同样的安全问题。我们需要牢记哪些违反安全的要点。在我看来,一个主要问题是与病毒有关的——手段 如何提示用户病毒并终止上载操作 如何在上载操作期间扫描文件中的病毒 可能存在若干安全风险。请用建议的解决方案讨论问题/风险 对此的任何答复都是值得赞赏的 提前感谢所有的风险都围绕着这样一个事实:淘气的人会上传可以在web服务器机器上执行的东西,并导致问题 防止恶意文件上传相关问题的一种实用方法是通过

我必须创建一个实用程序,通过它,用户可以使用asp.net文件上载服务器控件上载单个或多个文件

我正在寻找同样的安全问题。我们需要牢记哪些违反安全的要点。在我看来,一个主要问题是与病毒有关的——手段

  • 如何提示用户病毒并终止上载操作
  • 如何在上载操作期间扫描文件中的病毒
  • 可能存在若干安全风险。请用建议的解决方案讨论问题/风险

    对此的任何答复都是值得赞赏的


    提前感谢

    所有的风险都围绕着这样一个事实:淘气的人会上传可以在web服务器机器上执行的东西,并导致问题

    防止恶意文件上传相关问题的一种实用方法是通过检查
    PostedFile.ContentType
    属性来限制服务器将接受的文件类型。这标识MIME类型。最好排除
    .exe
    之类的内容,当然,在MS Office生成的文件(如
    .doc
    .xls
    )中存在宏和VBA自动化方面的问题


    这里有一个“如何”选项:

    根据我在开发文件共享系统方面的经验,检查文件扩展名很简单,但还不够。iis 6中存在一个漏洞,黑客可以通过在文件名的一部分添加“;”来绕过此检查,并将其shell脚本作为图像上传

    最好的方法是将用户上载的文件保存在站点根文件夹上方的一个文件夹中,例如,如果您的站点文件夹为:

    c:\hosting space\myuser\mydomain.com\www root\

    您的代码必须将文件保存到:

    c:\hosting space\myuser\mydomain.com\USERUPLOADs\

    通过此技巧,iis用户无法直接访问上载的病毒或外壳脚本

    并使用.aspx文件间接读取文件流

    <img src="/loadfiles.aspx?name=?????" />
    
    
    
    好处很多,例如,您可以编写统计计数器或检查用户会话,或避免跨站点访问您的用户文件,但您需要一些编码技能来添加对拥抱文件的下载简历支持,并且应注意脚本超时和

    另一个我没有亲自测试的解决方案是使用web.congif来避免从上载文件夹运行脚本权限:

    <location path="upload">
    <system.webServer>
        <handlers accessPolicy="Read" />
    </system.webServer></location>
    

    谢谢您的快速回答。我也在寻找一些其他的风险。主要关注的是受病毒感染的文件。