Прекращение подачи недопустимого типа файла или имени файла в coldfusion - PullRequest
1 голос
/ 05 апреля 2011

Итак, у меня возникла замечательная проблема, когда людям нравится отправлять недопустимые типы файлов или файлы с именами в стиле фанк ... (например .. hey_i_like_"quotes".docx) Иногда они даже пытаются загрузить ссылку в формате HTML ...1002 *

Как мне проверить что-то подобное?Кажется, он создает ошибку каждый раз, когда кто-то отправляет элемент со слабым именем.

Должен ли я создать сценарий cfscript, который проверяет его перед отправкой?Или есть более простой способ?

Ответы [ 5 ]

2 голосов
/ 05 апреля 2011

Если бы это было до отправки, это был бы javascript, а не cfscript.Javascript всегда можно обойти, так что я бы сказал, что вам лучше сделать это на стороне сервера с ColdFusion.Лично я бы просто обернул все это в try / catch (вы должны делать это в любом случае как само собой разумеющееся со всеми типами файловых загрузок), и выкинул бы ошибку назад, если их имя файла не годится.

1 голос
/ 07 апреля 2011

Когда вы говорите «Отправить», вы используете cffile, чтобы позволить пользователям загружать файл.

Если это так, используйте атрибут «принять» с попыткой обойти. например ....

<cftry> 
<cffile action = "upload"  
            fileField = "FileContents"  
            destination = "c:\files\upload\"  
            accept="image/jpg, application/msword"
            > 
 <cfcatch type="Any" >
    <p>sorry we could not upload your file!</p>
 </cfcatch>

</cftry>

Лично я бы не использовал "просто" JavaScript, так как это может быть отключено, и вы снова в одной лодке.

Надеюсь, это поможет.

0 голосов
/ 06 апреля 2011

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

Для клиентской части я рекомендую использовать плагин проверки jQuery , простой в использовании.

0 голосов
/ 05 апреля 2011

Как указал @Duncan, проверка на стороне клиента, скорее всего, будет выполняться в JavaScript. Лично, если бы у меня было время / ресурсы, я бы сделал это для удобства конечного пользователя. Если они загружают огромный PDF-файл, когда система требует DOCX, было бы неудобно, если бы они не получили сообщение, пока загрузка не будет завершена.

Что касается имен файлов, мне кажется, что самое простое решение (и то, которое я использовал в прошлом) состоит в том, чтобы предположить, что все имена файлов плохие, и переименовать их. Есть несколько способов сделать это. Если вам нужно сохранить исходное имя файла, я бы просто использовал urlEncodedFormat (), чтобы очистить имя файла во что-то, что является веб-удобным. Если вам нужно сохранить все версии, вы можете добавить метку даты / времени, чтобы bob.xocx стал bob_201104051129.docx или что-то подобное. Если вам необходимо сохранить исходное имя файла без каких-либо изменений, я бы порекомендовал установить таблицу БД в качестве системы указателя, сохранить там исходное имя, метку времени и другие метаданные и сослаться на файл, переименовав его в ID.

Но urlEncodedFormat (), вероятно, достаточно для того, что вы обрисовали.

0 голосов
/ 05 апреля 2011

На сервере, как часть проверки, используйте reFindNoCase() вместе с соответствующим регулярным выражением для проверки правильности пути к форматированному файлу. Вы можете найти множество примеров выражений регулярных выражений для пути к файлу в Интернете, например, this one. Надеюсь, это поможет.

...