假设我们有一个内部写有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应用程序中提供不会打开此漏洞的文件?
您可以编写一个提供图像的CFM页面.然后,您只需确保它们在CFM中进行身份验证.
http://localhost/GetFile.cfm?file=foobar.jpg
在GetFile.cfm中,您可以执行以下操作:
看看各种MIME类型.
如果你想做类似的事情,但保留一个更自然的URL,我认为你需要利用ColdFusion的Java servlet基础为任何匹配某种模式的URL创建一个处理程序.