IIS6或IIS7中的ColdFusion 8的Web文件安全性最佳实践

时间:2009-02-17 22:54:21

标签: iis-7 coldfusion iis-6

假设我们有一个内部写有CF应用程序的网站。

假设:

  • 将使用Server 2003 IIS6或2008 IIS7
  • 将使用ColdFusion 8
  • 目录浏览被拒绝
  • 需要SSL才能连接
  • 帐户登录过程是安全的(是的,我知道这是另一个 蜡球,但在网上讨论这个概念。

假设我在https://domain.com/folder1/folder2/有一个名为picture92352.ext的文件,想象它是jpg或pdf或其他什么。域名和文件之间的整个路径在命名结构,深度等方面差别很大。文件不会全部集中在一个文件夹中。

应用程序限制用户的链接,以便用户必须首先访问该文件才能找到它,但现在如果一个人知道该文件的完整URL,他们可以在不登录的情况下检索它到应用程序。这是默默无闻的经典安全状况。随机的人不太可能找到他们不应该访问的文件,但是一旦有人获得访问权限,他们就知道如何从另一台PC访问它,而这些PC的行为可能无法追溯到他们。

如何在用户登录之前限制对这些文件的访问,并且在登录后仍然可以让外部用户访问这些文件?有没有办法只使用权限,或者是在请求时让代码动态移动文件的唯一答案,还是有一些我甚至没想过的明显步骤?

让我稍微澄清一下。无论文件如何在页面上呈现,用户都可以使用浏览器IE,Firefox等来检查文件来自的URL。如果图像是链接,则IE的右键菜单中始终存在复制快捷方式,FF中的相同功能称为复制链接位置。如果图像以内嵌方式显示为页面的一部分,则IE用户可以右键单击并选择属性以查看URL,在FF中,相同的功能可用于查看属性,但有一个更方便的选项标记为复制图像位置。一旦用户知道文件的URL,如果位置或文件名没有改变,他们可以使用该URL而无需在CF应用程序中进行身份验证。

如果我更改NTFS /共享权限以便IUSR无法看到内容,那么我的CF应用程序和IIS无法推送它。我可以使用什么策略在CF应用程序中提供不会打开此漏洞的文件?

1 个答案:

答案 0 :(得分:6)

您可以编写一个提供图像的CFM页面。然后,您只需确保它们在CFM中进行身份验证。

<!-- something like this -->
http://localhost/GetFile.cfm?file=foobar.jpg

在GetFile.cfm中,您可以执行以下操作:

<!-- the filename part is what the browser will pre-popualate the file name in the download dialog as -->
<CFHEADER name="Content-disposition" value="attachment;filename=picture92352.ext"> 
<CFCONTENT type="text/plain" file="\\fileserver\folder1\folder2\picture92352.ext">

查看各种MIME types

如果你想做类似但保留更自然的URL,我认为你需要利用ColdFusion的Java servlet基础为任何匹配特定模式的URL创建一个处理程序。