ASP.NET文件上传控件 - 缓存到磁盘时的安全问题

3
MSDN指出,使用ASP.NET(v.2.0) Fileupload控件或底层的HttpPostedFile上传文件时,“文件以MIME多部分/表单数据格式上传。默认情况下,所有请求(包括表单字段和大于256 KB的上传文件)都会被缓冲到磁盘上,而不是保存在服务器内存中。”(引用自MSDN链接
有人知道这个缓冲区在磁盘上的位置,以及何时清除/删除缓冲区,即当请求结束时,如果请求没有正常结束,例如出现错误或意外情况,会发生什么?
我的担忧是,如果应用程序具有上传敏感信息(信用卡数据、个人数据等)的能力,这个文件将被缓冲到磁盘上,并且可能在请求结束后未被删除。在共享主机上,这会成为问题吗?也就是说,这个缓冲区是否可以从应用程序外部访问?
也许我误解了什么,但任何建议/见解/帮助都将不胜感激,谢谢。
2个回答

7

好的,我已经找到了一些关于上面问题的答案,现在把它们放在这里,以防对其他人有所帮助。

默认情况下(在machine.config文件中),文件上传/请求的设置如下:

请求的最大大小为4mb,在将请求缓冲到磁盘之前,在内存中存储256字节。这些设置可以在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文件。
因此,从这个角度来看,缓冲的敏感数据似乎不是什么问题,因为缓冲文件不会长时间保留。

0

如果有帮助的话,这里有更多信息:

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

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

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

例如:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接