启用Web的文件存储和对IIS_IUSRS删除权限的安全含义



我已经有很多年了这个问题,并且每次出现这个问题时都进行了研究,但永远找不到明确的答案。强大的互联网,MSDN,社区论坛对此保持沉默或模糊。在成千上万与发展相关的不确定性中,这是唯一一个仍然难以捉摸的人。

到了:为了使用户能够在其博客文章中上传和管理图像(以及其他文件),在共享托管环境中,我可以考虑SQL Server二进制数据类型(绩效含义)或文件系统。要使用后者,需要在存储目录中为IIS_IUSRS角色设置必要的权限:创建/写入,读取和删除。我的问题 - 如果这样做,安全性有什么?有人可以以某种方式利用此优势,绕过ASP.NET请求管道并操纵文件夹中的文件,而无需向相应的ASP.NET处理程序提出请求(检查权限,验证上传等)?

我已经开发了几个允许上传的系统,这总是困扰着我。现在,希望有人能够让我放心,理想情况下,解释了这一过程背后的机制。


update

查看了最新答案(非常感谢),这是一个问题的另一个表述:

客户端以任何可能的方式绕过请求管道并在允许它的目录中创建/删除文件(假设该人知道目录结构)吗?还是只有处理请求的代码才能做到?任何潜在的利用?

主要问题是能够在此目录中使用照片文件上传脚本,ASPX页面,并运行它。

这是一种情况:我被黑客入侵。邪恶的ASPX文件上传称为ASPXSPY。他们仍在尝试。帮助我捕获它们!

解决方案是在允许上传文件且不允许运行任何ASPX页面的目录上添加此额外的web.config文件。还要进行仔细检查以仅允许您允许的扩展名,并且如果有机会重命名,则不允许在文件名上更改该扩展。

<configuration>
    <system.web>
      <authorization>
        <deny users="*" />
      </authorization>
    </system.web>
</configuration>

也可以在您允许上传文件的目录上,不允许运行任何其他脚本,例如简单的ASP,PHP或EXE或任何内容。

珍藏说话

您的所有页面都有可以运行和操纵服务器上的许多内容的权限。您现在提供的是write在某些目录上的能力,也是使用某些ASPX页面。现在,ASP.NET还有另外一份额外的许可,可以在照片夹上写文件。另请注意,您的ASP.NET页面具有此控件,而不是用户。您在那里使用代码可以在此目录上编写的操作,因此必须小心地在那里仔细检查您写的位置,并且不允许其他目录,不允许用户操纵可以写入的目录。

所以这是薄弱的链接。为了能够上传更多可以控制服务器的脚本,至少该池的ASP.NET用户可以访问的部分。

之前这样做,我会提出两个建议:

首先,请勿将上传的文件存储在与应用程序代码相同的目录结构中(如果可能的话)。使其成为定义明确的外部位置,并明确锁定了应用程序正在运行的用户。这使得将恶意上传注入您的应用程序中,因为Web服务器中的任何内容或ASP.NET本身,都知道如何访问该文件(仅您的应用程序)。

如果绝对不可能这样做,请确保没有外部用户可以使用标准ASP.NET授权访问存储文件夹,并且只允许您的应用程序用户写入此文件夹,没有其他内容。

第二,请勿将上传的文件存储其原始名称和文件扩展名;将该元数据分开。只需将文件考虑一个原始的二进制数据。这是有两个原因的好处。首先,它可以防止服务器上的文件无意执行,无论是通过直接访问文件系统,Web服务器或ASP.NET访问文件的人。其次,攻击者很难利用恶意上传,因为他们永远无法猜测服务器上文件的名称或路径。

最新更新