【问题标题】:Web File Security best practices for ColdFusion 8 in IIS6 or IIS7IIS6 或 IIS7 中 ColdFusion 8 的 Web 文件安全最佳实践
【发布时间】:2009-02-17 22:54:20
【问题描述】:

假设我们有一个网站,其中包含一个内部编写的 CF 应用程序。

假设:

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

假设我在 https://domain.com/folder1/folder2/ 有一个文件,名称类似于 picture92352.ext,可以将其想象为 jpg 或 pdf 或其他格式。域名和文件之间的整个路径在命名结构、深度等方面差异很大。文件不会全部集中在一个文件夹中。

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

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

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

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

【问题讨论】:

    标签: iis-7 coldfusion iis-6


    【解决方案1】:

    您可以编写一个提供图像的 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 创建处理程序。

    【讨论】:

    • 绝对是要采取的方法。要进一步扩展,您将使用 cfcontent 来传递文件。我们一直这样做是为了交付受安全级别和规则保护的文档
    • 请注意,这适用于小文件,但往往会打磨大文件。我是在 CF6.1 左右做的,CF 必须将整个文件加载到内存中才能提供服务。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-03
    • 2010-09-28
    • 1970-01-01
    • 2011-01-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多