3

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

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

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

也许我误解了一些东西,但任何建议/见解/帮助将不胜感激,谢谢。

4

2 回答 2

7

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

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

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

<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 文件。

因此,从这一点看来,缓冲的敏感数据似乎不是一个很大的问题,因为缓冲的文件不会长时间停留。

于 2009-02-27T04:26:10.000 回答
0

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

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

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

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

例如。

<httpRuntime maxRequestLength="256" requestLengthDiskThreshold="262144"></httpRuntime>
于 2010-09-15T00:52:53.270 回答