Определите, является ли файл папкой или файлом Coldfusion - PullRequest
1 голос
/ 26 марта 2020

Я пытаюсь определить, смотрю ли я на папку или файл. Я сделал следующий подход. Вместо того, чтобы перейти к оператору if, который проверяет, является ли он папкой, он отправляет остальные. У меня вопрос: как определить, смотрю ли я на папку или файл?

<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>

1 Ответ

5 голосов
/ 26 марта 2020

Во-первых, не рекомендуется отправлять путь к папке и имя файла через строку запроса. Возможно, кто-то может покопаться, найти и загрузить в систему файлы, которые не предназначены для доступа. Это называется атака обхода пути.

Содержат ли имена папок строку .dir? Потому что это условие проверяется. Если они этого не делают, то поэтому он всегда идет в состояние else.

<cfif findNoCase('.dir', folder_name) >

Используйте directoryExists() для пути к папке и fileExists() для имени файла, чтобы увидеть, существует ли какой-либо из них, прежде чем пытаться запросить файл.

Лучше было бы сохранить путь к файлу и имя в БД, а затем запросить файл по идентификатору в строке запроса. Файл также должен храниться за пределами Интернета root, чтобы он не находился в общедоступной папке и не мог быть доступен без входа в приложение. Найдя правильный файл, используйте <cfcontent>, чтобы загрузить файл в браузер.

...