【问题标题】:ASP.NET FileUpload Control - Security concerns when buffered to diskASP.NET FileUpload Control - 缓冲到磁盘时的安全问题
【发布时间】:2010-09-15 08:52:53
【问题描述】:

MSDN 指出,当使用 ASP.NET (v.2.0) Fileupload 控件或底层 HttpPostedFile 上传文件时,“文件以 MIME 多部分/表单数据格式上传。默认情况下,所有请求,包括表单字段和上传的文件,大于 256 KB 的大小将缓冲到磁盘,而不是保存在服务器内存中。" MSDN Link

有谁知道它被缓冲到磁盘上的哪个位置以及何时清除/删除该缓冲区,即请求何时结束,以及在请求未正常结束的错误或意外情况下会发生什么?

我担心的是,如果应用程序能够上传敏感信息(CC 数据、个人数据等),该文件将被缓冲在磁盘上,并且在请求结束时可能不会被删除。这会是共享主机上的问题,即可以从应用程序外部访问此缓冲区吗?

也许我误解了什么,但任何建议/见解/帮助将不胜感激,谢谢。

【问题讨论】:

    标签: asp.net security file-upload


    【解决方案1】:

    OK 已经设法找到了上面提出的问题的一些答案,所以只要把它们贴在这里,以防它帮助其他人。

    默认情况下(在 machine.config 中)文件上传/请求的设置通常是

    4mb 作为请求的最大大小,在请求被缓冲到磁盘之前,256bytes 存储在内存中。这些设置可以在 web.config 的 httpRuntime 部分中被覆盖。

    <httpRuntime maxRequestLength="8192" requestLengthDiskThreshold="512" />
    

    上面的示例将允许最大 8mb 的请求大小,并在 512 字节后开始在磁盘上缓冲。文件被缓冲到

    C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files\ [APP_NAME] \ [SOME_HEX_NAME_DIR] \ [SOME_HEX_NAME_DIR] \uploads\

    在此路径上,将使用 [unique_name]_post.tmp 创建一个文件,该文件在请求期间存在,但由于请求已锁定而无法访问。

    我尝试以几种方式中断请求(停止 IIS、终止进程、在上传时关闭页面),并且在所有情况下都删除了 tmp 文件。

    因此,缓冲的敏感数据似乎不是什么大问题,因为缓冲的文件不会长时间停留。

    【讨论】:

      【解决方案2】:

      如果对任何人有帮助,请提供更多信息:

      From MSDN: “RequestLengthDiskThreshold 属性以字节数为单位指定输入流缓冲阈值限制。其值不应超过 MaxRequestLength 属性值。请求实体超过此阈值后,它会透明地缓冲到磁盘上。”

      我相信如果将 maxRequestLength 设置为与 requestLengthDiskThreshold 相同的级别(注意前者以 kB 为单位,后者以字节为单位),那么上传的内容将永远不会写入磁盘。

      当然,缺点是您将使用更多内存来服务文件上传。

      例如。

      <httpRuntime maxRequestLength="256" requestLengthDiskThreshold="262144"></httpRuntime>
      

      【讨论】:

        猜你喜欢
        • 2011-04-27
        • 1970-01-01
        • 1970-01-01
        • 2011-05-27
        • 2016-12-21
        • 1970-01-01
        • 2011-08-04
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多