asp.net - 如何确保上传的文件内容使用后无法恢复?

标签 asp.net security web-applications file-upload upload

我想让上传到 Web 服务器的文件的内容在使用后无法恢复。我的担忧是:

  • 上传文件后,它是否存储在临时目录(例如 Windows Temp 目录)中,如何清除那里的所有痕迹?
  • 文件的内容是否可以写入虚拟内存,如何确保不会写入或删除内容一旦写入?
  • 如果我加密文件,我是否还需要担心在文件加密之前将内容保存到临时目录、虚拟内存或其他地方?
  • 我可以在所有相关位置(临时、虚拟内存、任何其他位置)中执行安全删除吗?我该怎么做?
  • 是否有任何我遗漏的问题或实现既定目标的替代方法?

  • 注意这是一个 ASP.NET Web 应用程序。

    编辑 :感谢 djeeg 指出如何将临时上传目录重新定位到更可控的地方的链接。

    对其他点有任何反馈吗?

    最佳答案

    磁盘安全
    您可以让删除 实用程序为您完成工作。
    如果你在 Mono/Linux 上运行 ASP.NET,你可以使用 wipe命令通过 Process类(确保安装了wipe包)。
    如果您运行 Windows,方法是相同的。使用 wipe.exe当您需要安全地处理文件时执行硬清理的实用程序。
    我喜欢 this分发免费wipe.exe 的网站,它不包含在Windows 标准安装中(太糟糕了)。
    第二种方式是实现Guttman algorithm ,但我认为使用别人的代码更便宜。
    请记住,删除是非常 I/O 密集型的,不要等待它完成,否则您可能会显着降低应用程序的速度。此外,在高负载的网站上,您可能会遇到明显的减速。
    内存安全SecureString class 帮助您在内存中不留下任何字符串的痕迹。但是当您处理文件时,您实际上是在处理流。我不确定是否担心 volatile 内存的内容(即使您处理 Wikileaks 文档)。
    您必须先执行 威胁分析告诉你内存的主要威胁是什么。以下是一些问题:

  • 有人可以使用具有执行内存转储功能的管理员/root 帐户访问服务器吗? (普通用户无法读取您的内存,.NET 可防止由于指针未使用而导致缓冲区溢出)
  • 有人可以物理访问服务器吗?您还不够信任您的托管服务提供商吗?你运行虚拟服务器吗?

  • 如果答案是否定的,你不应该担心内存安全
    交换空间安全
    即使您在 Windows 上运行,让我将页面文件、虚拟内存文件或其他任何内容称为“交换”。您可能会考虑禁用它(确保您有足够的 RAM),否则,您可能会考虑对其进行加密(但性能会下降)。
    但同样,为了让某人在运行时扫描您的交换文件,他必须是 root,或者对关闭的服务器具有物理访问权限。
    如果数据太敏感,我会去禁用交换。
    [添加]我确定你已经使用SSL上传文件,以防你忘记了一些原则......

    关于asp.net - 如何确保上传的文件内容使用后无法恢复?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4721247/

    相关文章:

    php - 如何防止PHP中的SQL注入(inject)?

    asp.net - 遍历目录并使用 Razor 获取每个图像文件路径

    asp.net - 在 GridView 中交错行/列颜色

    c# - 为什么我收到错误 Could not load type 'SlipUpdate' ?

    c# - 如果正在预览页面,Sitecore API 会在后面检查代码

    java - 有没有办法阻止 Eclipse 在启动 Web 应用程序时打开浏览器?

    javascript - 在 couchDb 中存储大型 JSON 对象的好方法是什么?

    javascript - asp.net 中特定行的分页符

    ajax - 在没有提交按钮的情况下防止针对ajax请求和表单的CSRF

    android - Android 上的 AWS Cognito - 如何从刷新 token 获取新 session