coldfusion-防止直接访问要下载的用户创建的文件

时间:2018-11-07 14:11:56

标签: coldfusion

用户登录我们的系统时,可以创建CSV报告。然后,该报告可以由用户下载。目录结构是这样的:

siteroot.com/user/
siteroot.com/user/login/
siteroot.com/user/login/downloads/[file].csv

/ login /目录只能通过登录用户访问。但是,如果有人知道URL,可以直接转到CSV文件的URL并抓取该文件:

siteroot.com/user/login/downloads/myfile.csv

有没有比将它们移出根目录然后使用cfdirectory / cfheader / cfcontent将CSV文件从非IIS目录中拉出并提供给用户更好的(简单)解决方案?

1 个答案:

答案 0 :(得分:2)

请勿将这些文件放在可通过网络访问的文件夹中。

如果要创建不需要保留的数据导出,请在temp文件夹(也是非公共访问的文件夹)中创建文件,然后使用<cfcontent>将文件推送到浏览器,这将向用户显示一个下载对话框。作为此过程的一部分,您将从服务器上删除文件,因此,每当有人请求导出时,都将运行此过程。

这可以使您的服务器保持干净,并使文件保持登录状态。这是我为stub out this process创建的要点。它使用<cfspreadsheet>完成导出。这是代码的核心:

<cfspreadsheet action="write" filename="#config.full_temp_name#" query="config.q" />
<cfspreadsheet action="read" src="#config.full_temp_name#" name="local.xls" />
<cffile action="delete" file="#config.full_temp_name#" />

<cfif len(arguments.fileName) GT 0>
    <cfheader name="content-disposition" value="attachment; filename=#arguments.fileName#.#config.extension#" />
<cfelse>
    <cfheader name="content-disposition" value="attachment; filename=#config.temp_name#.#config.extension#" />
</cfif>
<cfcontent type="application/msexcel" variable="#spreadsheetReadBinary(local.xls)#" reset="true" />