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

标签 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 目录中提取出来并将其提供给用户更好(更简单)的解决方案?

最佳答案

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

如果您要创建不需要保留的数据导出,请在临时文件夹(也不是可公开访问的文件夹)中创建文件并使用 <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" />

关于Coldfusion - 防止直接访问用户创建的要下载的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53191159/

相关文章:

javascript - 函数根据 setinterval 循环但具有不同的参数

php - 如何在 coldfusion 9 的 &lt;script&gt; 标签内调用 php 函数

javascript - ESLint:我如何告诉 eslint 忽略 Coldfusion 评论

javascript - 共享主机上的 cftextarea 和自定义工具栏

MySQL 查询用于使用 HTML 表单复选框检索记录

xml - 在 ColdFusion 中出现 XML 解析错误。返回的数据包可以验证吗?

javascript - CFGMap Google map API V3 始终以经度/纬度为中心 map

mysql - 在 ColdFusion 9 中将 HTML 格式的文本转换为常规文本

javascript - 使用 jQuery 将多个 CSS 类组成的 Javascript 数组分配给一个元素

apache - Linux/Apache 上的 ColdFusion 稳定吗?