如何防止外部用户查看文档文件

dyg*_*gta 4 security coldfusion

我已经建立了一个在线系统,允许用户使用ColdFusion下载PDF文件.用户必须先登录才能下载文件(PDF和Microsoft Office文档).(此应用程序仅适用于我们公司的员工.)

然而,直到今天我才发现任何有互联网访问权限的人都可以查看这些文件.在Google搜索中只有某些关键字(例如"医疗表单myCompanyName"),他们可以使用浏览器查看PDF文件.

我怎么能阻止这个?

更新
这就是我的问题所在.我已经为所有PDF文件创建了一个文件夹.使用数据库中的ID调用每个文件.如果让用户想查看医疗表格,链接将是:http://myApplication.myCompanyName/forms.cfm?Department = Account&filesID = 001.

如果用户复制此URL并从系统注销,他/她将无法查看此文件.(将显示登录页面)

但是,如果没有网址,其他互联网用户只能通过在网上搜索来查看pdf文件,搜索引擎会提供一个指向文件夹本身的链接,而无需登录.

示例:Medical Form的pdf文件存储在名为Document的文件夹中.当互联网用户搜索医疗表格时,搜索引擎会将其链接到:http://myApplication.myCompanyName/Document/Medical%20Form.pdf

我们在此文件夹中有大量PDF文件,其中大部分都是保密的,仅供内部查看.在php中,我们可以通过使用.htaccess来禁用它.我想知道冷冻是否有这样的东西?

Ser*_*gii 5

您可以使用单行代码发送文件,如下所示:

<cfif isAuthorized>
    <cfcontent file="/path/to/files/outside/of/web/root/Form.pdf" type="application/pdf" reset="true" />
</cfif>
Run Code Online (Sandbox Code Playgroud)

ColdFusion FTW,对.

请注意,处理大文件(例如,100MB +)可能会导致一些问题,因为文件在发送之前被推送到RAM.看起来这不再正确,正如Mike的回答所解释的那样.

另一种选择是使用内容类型,x-application如果您想强行下载.

UPD

您希望将此代码放入文件(假设为file.cfm)并将其用于PDF链接.像这样的东西:

<a href="file.cfm?filename=Xyz.pdf">Download file Xyz.pdf</a>
Run Code Online (Sandbox Code Playgroud)

file.cfm:

<!--- with trailing slash --->
<cfset basePath = "/path/to/files/outside/of/web/root/" />

<cfif isAuthorized AND StructKeyExists(url, "filename") 
      AND FileExists(basePath & url.filename) 
      AND isFile(basePath & url.filename) 
      AND GetDirectoryFromPath(basePath & url.filename) EQ basePath>
    <cfcontent file="#basePath##url.filename#" type="application/pdf" reset="true" />
<cfelse>
    <cfoutput>File not found, or you are not authorized to see it</cfoutput>
</cfif>
Run Code Online (Sandbox Code Playgroud)

UPD2

添加GetDirectoryFromPath(basePath & url.filename) EQ basePath为所提及的安全问题的简单快速保护.

我个人通常使用ID /数据库方法,虽然这个答案最初是作为简单的指导,而不是真正的综合解决方案.