Какой самый безопасный способ в ColdFusion удалить папку и ее содержимое? - PullRequest
1 голос
/ 07 сентября 2010

Я заканчиваю создание утилиты выгрузки файлов для нашего сайта, и если выгрузка имеет недопустимый формат (в соответствии с нашими спецификациями, не стоит здесь переходить), я хочу удалить папку, в которую был разархивирован zip-файл, и все этосодержание.

До сих пор я использовал метод создания динамического пакетного файла, такой как:

    <!--- check if folder exists before starting to delete --->
<cfif directoryexists("#file_path_course#")>

    <!--- this can be passed in a varaible or whatever ---> 
    <cfset tDirectory = "#file_path_course#"> 

    <!--- This is what we will put in the bat file ---> 
    <cfset tString ="RMDIR /S /Q " & tDirectory> 

    <!--- generate a .BAT file for later execution ---> 
    <cffile action="WRITE" file="#file_path_course#\delete.bat" output="#tString#">

    <!--- Now execute the file to delete everything (Folder and all sub-folders and files)---> 
    <cfexecute name="#file_path_course#\delete.bat" timeout="60"></cfexecute> 

    <!--- check if bat file exists --->
    <cfif fileexists("#file_path_course#\delete.bat")>

        <!--- now delete the bat file ---> 
        <cffile action="DELETE" file="#file_path_course#\delete.bat"> 

    </cfif>

    <!--- delete course folder --->
    <cfdirectory action="delete" directory="#file_path_course#" recurse="yes">

    <cfset course_files_deleted = "Yes">

</cfif>

Но я, правда, обеспокоен разрешенным использованием тега cfexecute.

Есть еще одна опция, которая использует опцию удаления рекурсии cfdirectory, которая выполнит все, что я прошу, но я хочу быть уверен, что не удалит папки / файлы за пределами той папки, на которую я указал.

Существует 3-й способ, который включает в себя cfdirectory и циклический цикл вокруг него, но мне также нравится идея использовать меньше строк кода для выполнения простой операции.

Какой вариант вы доверяетебольше всего?

Я использую IIS7, Coldfusion 8.

Ответы [ 3 ]

6 голосов
/ 07 сентября 2010

Почему бы просто не использовать cfdirectory?Вы сказали, что беспокоитесь о том, что он удалит содержимое «вне» указанной вами папки.Не будетПросто как тот.Если это так, то тег будет сломан.:)

3 голосов
/ 07 сентября 2010

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

<cfset targetDirectory = "C:\Websites\site\thisFolder" />
<cfif directoryExists(targetDirectory)>
<cfdirectory action="list" directory="#targetDirectory#" listInfo="" name="theseFiles" recurse="true" type="file" />
    <cfif theseFiles.recordcount gt 0>
    <cfloop query="theseFiles">
        <cffile action="delete" file="#targetDirectory#/#theseFiles.name#" />
    </cfloop>
    </cfif>
<cfdirectory action="delete" directory="#uploadDirectory#/#allFolders.name#" />
</cfif>
2 голосов
/ 07 сентября 2010

что я хотел бы сделать, это загрузить файл во временный каталог за пределами webroot.вы можете использовать gettempdirectory () для этого, который использует временный каталог вашей системы (c: \ windows \ temp для windows)

, затем вы можете разархивировать файл в подкаталог вне временного каталога и выполнить некоторые проверки безопасностипротив распакованных файлов и убедитесь, что все в порядке, при этом не открывая ваш сайт для каких-либо атак.если все получится, вы можете переместить файлы в их окончательное место отдыха.если нет, просто используйте cfdirectory (как указал cfjedimaster), чтобы удалить подкаталог и все файлы.

...