2016-11-29 3 views
-1

Как получить тип содержимого (тип MIME) из байта [] или Base64String в C#? (Asp.Net Core)Получить тип контента из байта [] в C#

Мой веб-api получает файл, отправленный в объект JSON. Файл закодирован в Base64String. Мой первый шаг состоял в том, чтобы преобразовать эту base64string в массив байтов, а затем выполнить проверки. Одна из валидаций - проверить, является ли это допустимым файлом. Для этого мне нужно проверить его тип содержимого.

private bool validateContent (byte[] content) { 
    //Get mime content type from content 
} 
+6

'Content-type' должны быть отправлены в качестве заголовка. Это не будет в самих данных. Как выглядит ваш объект JSON? –

+1

@DanWilson: Я думаю, он хочет получить mimetype из любых данных, отправленных в виде байта (например, двоичные файлы, такие как excel xlsx, xls, изображения и не доверять тому, что клиент отправляет и т. Д.), То есть часто его общее, что клиент отправляет заархивированные файлы как «application/octet-stream», как некоторые почтовые клиенты, которые ничего не говорят о том, какой тип это действительно есть) – Tseng

+0

Я знаю, и я говорю, что это невозможно из потока байтов, если вы не хотите сканировать маркеры типов файлов в данные, которые ненадежны и подвержены ошибкам. http://stackoverflow.com/questions/1654846/in-c-how-can-i-know-the-file-type-from-a-byte –

ответ

1

Вы можете сделать это, просто проверив подписи файлов (магические числа), например, в HEX или ASCII. Список подписей вы можете найти на https://en.wikipedia.org/wiki/List_of_file_signatures или http://www.garykessler.net/library/file_sigs.html

Не доверяйте заголовок запроса Content-Type, поскольку он может быть легко подделать пользователем

+1

Подпись файла также может быть подделана. И, конечно же, это может быть расширение файла. Нет безопасного пути. – poke

+0

Несомненно, но если файл подписи файла/файла подмены может быть неверно истолкован интерпретатором, а финнализация не выполнена. Заголовок заголовка Spoofing Content-Type намного опаснее. Полу-сейфом будет подпись и расширение файла chceck –

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