支持Web的文件存储以及为IIS_IUSRS提供删除权限的安全隐患

时间:2012-11-01 01:00:43

标签: asp.net security iis file-upload file-permissions

多年来我一直有这个问题,每次出现这个问题都做过研究,但却找不到明确的答案。不知何故,强大的互联网,MSDN,社区论坛,无论是沉默还是模糊。在成千上万与发展有关的不确定因素中,这是唯一一个难以捉摸的不确定因素。

要点为了让用户能够上传和管理博客帖子中使用的图片(和其他文件),在共享托管环境中,我可以考虑SQL Server二进制数据类型(性能影响),或文件系统。要使用后者,需要为存储目录中的IIS_IUSRS角色设置必要的权限:create / write,read和delete。我的问题 - 如果我这样做,有什么安全隐患?有人可以以某种方式利用这一点,绕过ASP.NET请求管道并操纵文件夹中的文件而不向相应的ASP.NET处理程序(检查权限,验证上传等)发出请求吗?

我开发了几个允许文件上传的系统,这一直困扰着我。现在,希望有人能够放心,理想地解释这个过程背后的机制。


更新

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

客户端是否可能以某种方式绕过请求管道并在允许它的目录中创建/删除文件(假设此人知道目录结构)?或者只有处理请求的代码可以执行此操作?任何潜在的漏洞?

2 个答案:

答案 0 :(得分:1)

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

以下是一个案例:I've been hacked. Evil aspx file uploaded called AspxSpy. They're still trying. Help me trap them‼

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

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

同样在允许上传文件的目录上,不允许运行任何其他脚本,如简单的asp,php或exe,或任何其他脚本。

一般来说

您的所有网页都有权在服务器上运行和操作许多内容。你现在给出的是write对某些目录的能力,也是通过使用一些aspx页面。 asp.net现在还有一个额外的权限,可以在照片文件夹中写入文件。另请注意,您的asp.net页面有此控件,而不是用户。你在那里使用你的代码可以写在这个目录上,所以必须小心那里仔细检查你写的地方,不允许任何其他目录,不允许用户操纵可以写入的目录。

所以这是薄弱环节。能够上传更多可以控制服务器的脚本,至少是该池的asp.net用户可以访问的部分。

答案 1 :(得分:1)

之前完成此操作后,我会提出两条建议:

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

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

其次,不要将上传的文件与原始名称和文件扩展名一起存储;保持元数据分开。只需将文件视为原始二进制blob数据。这有好几个原因。首先,它可以防止在服务器上无意中执行文件,无论是直接访问文件系统的人,Web服务器还是ASP.NET。其次,它使攻击者更难以利用恶意上传,因为他们永远无法猜测服务器上文件的名称或路径。