我正在尝试确定我是在查看文件夹还是文件。我做了以下方法。而不是转到检查其是否为文件夹的 if 语句,而是转到 else。我的问题是:如何确定我是在查看文件夹还是文件?
<cfif structKeyExists(URL, 'method') and URL.method eq 'download'>
<cfset folder_name = URL.folder_id />
<cfset file_name = URL.name />
<cfif findNoCase('.dir', folder_name) >
<a href="subfolder_files.cfm?method=download&path=#folder_name#&folder_id=#file_name#">hi</a>
<cfelse>
<a href="process_file_page.cfm?method=download&folder_id=#file_name#&name=#URLEncodedFormat(Name)#"></a>
</cfif>
<cfabort>
Run Code Online (Sandbox Code Playgroud)
首先,不建议通过查询字符串发送文件夹路径和文件名。有人可能会在系统中四处闲逛、查找和下载不打算访问的文件。这被称为路径遍历攻击。
文件夹名称是否包含字符串.dir
?因为这是正在检查的条件。如果他们不这样做,那么这就是为什么它总是会出现这种else
情况。
<cfif findNoCase('.dir', folder_name) >
Run Code Online (Sandbox Code Playgroud)
使用directoryExists()
针对该文件夹的路径和fileExists()
对文件名,看尝试请求文件之前,如果任一存在。
更好的方法是将文件路径和名称保存在数据库中,然后通过查询字符串中的 ID 请求文件。该文件还应存储在 Web 根目录之外,因此它们不在可公开访问的文件夹中,并且在未登录应用程序的情况下无法访问。找到正确的文件后,使用<cfcontent>
将文件下载到浏览器。
归档时间: |
|
查看次数: |
47 次 |
最近记录: |