2012-03-21 3 views
3

, поскольку я пытаюсь загрузить файл, и я пытаюсь проверить их расширение, поскольку я знаю, что это не очень хорошая практика, так что это код, который Я делаю это. он отлично работает, но поскольку я сталкиваюсь с проблемой в Apple Mac Users, они не могут загрузить файлы PDF.Как принять файлы с указанным типом контента по операционной системе

if (upload1.HasFile) 
     { 
     Finfo = new FileInfo(upload1.PostedFile.FileName); 
     if (Finfo.Extension.ToLower() == ".docx" || Finfo.Extension.ToLower() == ".doc" || Finfo.Extension.ToLower() == ".xls" || 
          Finfo.Extension.ToLower() == ".xlsx" || Finfo.Extension.ToLower() == ".pdf" || Finfo.Extension.ToLower() == ".jpg" || 
          Finfo.Extension.ToLower() == ".png" || Finfo.Extension.ToLower() == ".gif" || Finfo.Extension.ToLower() == ".txt" || 
          Finfo.Extension.ToLower() == ".mp4" || Finfo.Extension.ToLower() == "ppt" || Finfo.Extension.ToLower() == ".bmp" || 
          Finfo.Extension.ToLower() == ".swf" || Finfo.Extension.ToLower() == ".rm" || Finfo.Extension.ToLower() == ".pptx") 
     { 
      // Accept File 
     } 
} 

теперь, что я думал, что я буду использовать этот код, так что он будет решать проблему

if (
     upload1.PostedFile.ContentType == "text/rtf" || 
     upload1.PostedFile.ContentType == "application/doc" || 
     upload1.PostedFile.ContentType == "appl/text" || 
     upload1.PostedFile.ContentType == "application/vnd.msword" || 
     upload1.PostedFile.ContentType == "application/vnd.ms-word" || 
     upload1.PostedFile.ContentType == "application/winword" || 
     upload1.PostedFile.ContentType == "application/word" || 
     upload1.PostedFile.ContentType == "application/msword" ||  
     upload1.PostedFile.ContentType == "application/x-msw6" || 
     upload1.PostedFile.ContentType == "application/x-msword" || 
     upload1.PostedFile.ContentType == "application/pdf" || 
         FileUpload1.PostedFile.ContentType == "application/x-pdf" || 
     upload1.PostedFile.ContentType == "application/vnd.openxmlformats-officedocument.wordprocessingml.document" || 
     upload1.PostedFile.ContentType == "application/vnd.openxmlformats-officedocument.wordprocessingml.template" 
     ) 

это хороший способ принимать файлы от пользователей. Мне нужно разрешить все файлы, кроме EXE, DMG, DLL, CS, SQL, BAT,. как я могу убедиться, что он будет работать во всех операционных системах.

  • Пользователь Apple может использовать OpenOffice или другое программное обеспечение для загрузки. так что нам нужно, чтобы этот типа файла также

может кто-нибудь сказать мне, как справиться с этой ситуацией

ответ

0

Я использовал расширение файла и даже проверку типа COntent. наряду с тем, что мы ограничили пользователя не загружать, кроме офисных документов, даже мы пробовали Telerik Upload для достижения функциональности. еще раз спасибо всем, кто дал ответы.

+0

Теперь назначьте Баунти себе. :) – Pankaj

0

Лучшим способом сделать это является использованием компонента FileOpenDialog, чтобы позволить пользователю выбрать файл аккуратно, в то время как добавление фильтров к компоненту (например, «* .swf | swf-файлы»).

+0

Я говорю об управлении загрузкой файлов asp.net –

+0

my bad. Единственное улучшение, о котором я могу думать, это: var fileex = Finfo.Extension.ToLower(); if (new [] {"docx", "swf", ...}. Любой (ex => ex == fileex)) {...} – SimpleVar

0

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

Я бы рекомендовал вам запустить через некоторые антивирусные WebService или проверку перед acepting на файлы что-то вроде http://www.opswat.com/products/metascan

0

Когда загрузить файл сделать, они должны быть доступны сразу? То, что я делал в прошлом, - это разместить их в ожидающей папке на сервере, а затем с заданным интервалом (хотя это может быть вызванная функция после загрузки). Я запускаю небольшой процесс, который считывает первые несколько байтов данных. Большинство этих типов файлов имеют запись заголовка, часто в виде простого текста, например, PDF имеет «% PDF» в качестве первых 4 символов. Исполняемые файлы часто начинаются с символов «MZ». Посмотрите в шестнадцатеричном редакторе (например, TextPad). Это, конечно же, конечный порт захода, ваша система безопасности, первые шаги - ограничить суффикс, как вы это делаете (хотя это не настоящая гарантия содержимого файла). Вы также можете использовать типы MIME для блокировки определенных типов Mime Type List, которые тоже помогут. см. здесь, например: http://forums.asp.net/p/1554764/3829242.aspx

Редактировать: обратите внимание, что некоторые из этих файлов, которые вы хотите пропустить, представляют собой просто текстовые файлы: .bat и .cs, например. Таким образом, MIME-типы или чтение начала данных не помогут - так лучше всего либо запретить эти расширения, либо переименовать расширения в .txt при сохранении на сервере. Они не могут нанести вред как текстовые файлы с расширением .txt, как они будут; не будет исполняемым - вам также нужно будет подумать .reg тоже.

-1

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

Я подозреваю, что ваша проблема может быть ошибкой пользователя. Можете ли вы проверить, что пользователь «mac» не имеет открытого файла во время загрузки? Нет никакой причины, что загрузка с mac должна вести себя иначе, чем от ПК.

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

+2

Очевидно, что вы не опытный менеджер. Принятие всех типов файлов вряд ли является пожарным преступлением. Хороший менеджер воспользуется возможностью, чтобы научить своих растущих разработчиков или, возможно, поручить старшему разработчику провести обзор кода. Или, может быть, поручите разработчику провести некоторое исследование онлайн в StackOverflow, чтобы узнать лучшие практики! ; -) – BenSwayne

+0

хорошо - контекст будет заключаться в том, что такие элементы документированы, документируются в стандартах; было бы поднято во время обзора не делать; и, как правило, это не разумная вещь. так что - да, я стрелял в них, так как кто-то, кто будет делать это, ленив или не задумывается, и в любом случае не будет хорошо соответствовать людям, которые работают на меня. – mson

+0

Я согласен с вашим заявлением, если у моего магазина были noobs. к счастью, я приступаю к работе с людьми высшего уровня. – mson

2

Тип контента в основном определяется клиентом, но в основном клиент не может отправлять тип контента, в этом случае проверка расширения является лучшим способом проверки типа файла. Или вы должны проверить оба. Мы столкнулись с проблемой с некоторыми Mac-клиентами, которые не отправляли тип контента.

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

Тип контента - плохая идея, потому что, если у пользователя нет соответствующего программного обеспечения, os отправит неправильный тип контента.

0

Вы проверили этот ответ Using .NET, how can you find the mime type of a file based on the file signature not the extension?

Получение типа mime из файла возможно со стороны сервера и черного списка теми, которые вы не хотите.

Также использование выражения reg для фильтрации типа файла в диалоговом окне Open file несколько ненадежно, так как любой пользователь может напечатать, например, . в поле имени файла и загрузить любой тип файла.

0

«Мне нужно, чтобы все файлы, кроме EXE, DMG, DLL, CS, SQL, BAT,. Как я гарантировать, что он будет работать на всех операционных системах.»

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

Для этого кода:

if (Finfo.Extension.ToLower() == ".docx" || Finfo.Extension.ToLower() == ".doc" || Finfo.Extension.ToLower() == ".xls" ||..... 

Почему не просто обратная логика на расширений файлов, которые запрещены?

if (Finfo.Extension.ToLower() != ".exe" && !Finfo.Extension.ToLower() != ".dmg" && !Finfo.Extension.ToLower() != ".dll" &&.......etc 

Это поможет вам сэкономить некоторый код, особенно если список приемников не является конечным и/или небольшим. Подумайте о парне, который может потребоваться внести изменения в свой код позже .... может быть, вы: *)

+0

Например, скажем, через несколько лет один из принятых типов файлов становится неприемлемым.Программисту придется либо просеять все принятые случаи «ИЛИ», чтобы найти тот, который нужно удалить, либо они могут просто придерживаться другого «&&» случая, используя обратную логику. Мне лично пришлось искать тысячи строк кода, чтобы сделать такие исправления, поверьте мне. – Taruchu

Смежные вопросы