Что такое MIME в Linux и как его использовать в скриптах и ​​серверах?

  • Что такое MIME, как устроен тип MIME и почему он важен в электронной почте, настольных системах Linux и HTTP?
  • Пути к файлам и MIME-файлам в Linux, связь с приложениями (.desktop, mimeapps.list) и общими базами данных.
  • Практическое применение таких команд, как file, xdg-mime и инструменты обновления базы данных MIME.
  • Важность MIME в веб-серверах, заголовки Content-Type и их связь с безопасностью и путаницей типов.

Что такое MIME в Linux и как его использовать в скриптах и ​​серверах?

При работе с Linux, веб-серверами или электронной почтой рано или поздно вы столкнетесь с... MIME-типыИногда это кажется чем-то эфемерным, но на самом деле это тот элемент, который позволяет системе определить, является ли что-то не так. текст, изображение, видео или двоичный код и что мне с этим делать.

Если вы управляете серверами, скриптовыми программами или просто хотите контролировать, какое приложение открывается с каждым файлом, понимание этого процесса вам пригодится. Что такое MIME в Linux и как он используется? Это избавит вас от множества проблем. Кроме того, это ключевая тема при обсуждении Веб-безопасность, HTTP-заголовки и XSS-атаки связано с путаницей типов.

Что такое MIME и откуда он появился?

Термин MIME происходит от Многоцелевые интернет-почтовые расширенияSMTP — это расширение старого почтового протокола SMTP, разработанное для передачи не только простого 7-битного ASCII-текста. На заре существования Интернета можно было отправлять только 7-битный ASCII-текст. очень простые текстовые сообщенияБез диакритических знаков, без символа «ñ» и, конечно же, без прикрепления изображений, аудиозаписей или документов.

Для преодоления этого ограничения стандарт MIME определил систему, позволяющую описывать тип контента Отправляемый контент (текст, изображение, аудио, видео, универсальный двоичный код и т. д.) определяется также способом его преобразования для передачи по каналам, принимающим только определенные символы. Все это выражается через дополнительные заголовки в электронном письме.

Что такое суперблок Linux и как он работает?
Теме статьи:
Суперблок в Linux: что это, что он хранит и как его восстановить.

Структура MIME-типа

MIME-тип состоит из двух частей, разделённых косой чертой: основной тип и подтипВместе они довольно точно описывают, какие именно данные обрабатываются.

El основной тип Это указывает на общую категорию контента. Наиболее распространенные категории: text, image, audio, video y applicationХотя их больше, например, следующие типы. multipart для составного содержимого.

El подтип В нем подробно описывается конкретный формат в рамках данной категории. Например, для текста у нас может быть plain u html; по качеству изображений они — классика. jpeg, png, gifДля обычных бинарных файлов, например, такие вещи, как pdf u octet-stream.

Очень распространенный пример в интернете: text/htmlЭто указывает на то, что контент представляет собой HTML-документ. Другой типичный пример: image/png для изображения в формате PNG или application/pdf для PDF-файла.

MIME в электронных письмах: заголовки и кодировки

Что такое MIME в Linux и как его использовать в скриптах и ​​серверах?

Стандарт MIME для электронной почты определяет ряд параметров. конкретные заголовки которые дополняют классические поля (От, Кому, Тема и т. д.) и позволяют описать, что отправляется и как это закодировано.

Заголовок MIME-Version указывает версию используемого стандарта, которая в настоящее время почти всегда 1.0Обычно это воспринимается как MIME-Version: 1.0 в начале расширенных сообщений.

Заголовок Content-Type Опишите MIME-тип и подтип тела сообщения или каждой его части. Также можно указать такие параметры, как... кодировок, что указывает на используемую кодировку символов, например Content-Type: text/plain; charset=UTF-8 o Content-Type: image/jpeg.

Заголовок Content-Transfer-Encoding В нем указывается применяемое кодирование, позволяющее передавать контент по каналу, изначально принимающему только 7-битный текст. Поддерживаются следующие классические методы: 7-битный, quoted-printable и base64и используется также в современных условиях. 8bit или даже двоичный на серверах, которые это поддерживают.

Помимо перечисленного, в MIME-сообщениях часто встречаются следующие элементы: Content-ID (уникальный идентификатор для каждой стороны), Content-Description (описательный текст) и Content-Dispositionкоторый определяет, следует ли отображать вложение в режиме онлайн или загружать, а также соответствующее имя файла.

Простой пример MIME-сообщения

В электронном письме, содержащем символы с диакритическими знаками, могут быть заголовки, подобные этим, которые наглядно демонстрируют использование MIME для обеспечения совместимости содержимого с 7-битными системами:

From: usuario@ejemplo.com
To: destinatario@ejemplo.com
Subject: =?Cp1252?Q?Cami=F3n?=
MIME-Version: 1.0
Content-Type: text/plain; charset=Cp1252
Content-Transfer-Encoding: quoted-printable

Acentos =E1=E9=ED=F3=F3 y otros =D1 =F1 =FC
.

В этом случае Данный вопрос также закодирован. используя специальный синтаксис: =?juego-de-caracteres?codificación?resultado?=где кодировка может быть Q для цитируемого для печати или B для base64. Это стандартный способ представления символов размером более 7 бит в заголовках, таких как Subject.

Многокомпонентные сообщения и вложения

Одним из главных преимуществ MIME в электронной почте является возможность отправки множественные вложения и составное содержимое в одном сообщении с использованием типов multipart.

Тип multipart/mixed Он используется для сообщений с несколькими независимыми вложениями, например, текстового сообщения и нескольких файлов. Каждая часть отделена символом граница определяется, например, в заголовке Content-Type. boundary="----------020005090303070203010601".

Тип multipart/alternative Это позволяет включать несколько вариантов представления одной и той же информации, например, один текст в обычном формате, а другой — в формате HTML. Почтовый клиент выберет, какой из вариантов отобразить, исходя из своих возможностей и настроек пользователя.

Другие распространенные типы многокомпонентных конструкций: multipart/parallel (для контента, отображаемого одновременно, например, синхронизированного аудио и видео). multipart/signed (цифровая подпись данных) и multipart/related (Основное содержимое с сопутствующими ресурсами, такими как изображения, встроенные в HTML).

Основные типы MIME и их общее использование

Помимо почты, типы MIME используются для классификации. любой контент, передаваемый по протоколам, таким как HTTP.Вот несколько основных типов и примеров:

  • текст: читаемые текстовые данные, такие как text/plain, text/html, text/rfc822.
  • изображение: двоичные данные, представляющие изображения, такие как image/jpeg, image/gif, image/png.
  • аудиоцифровой звук, например audio/basic, audio/wav.
  • XNUMX году видеоконтент, например: video/mpeg.
  • приложениюдругие бинарные файлы и специфические форматы, такие как application/octet-stream, application/pdf или более специализированных типов.

Эти типы зависят от различных форматы кодирования когда необходимо пройти через ограниченные каналы. В дополнение к упомянутым выше 7-битным, 8-битным, quoted-printable, base64 и двоичным данным, MIME достаточно открыт для поддержки сторонние схемы кодирования если обе стороны их понимают.

MIME в интернете: заголовок Content-Type и браузеры

В контексте HTTP MIME становится еще более наглядным: каждый раз, когда браузер запрашивает страницу или ресурс, сервер отвечает, указывая MIME. Какой тип контента он предоставляет? через заголовок Content-Type.

Когда браузер запрашивает ресурс, веб-сервер сначала проверяет, существует ли он, и определяет его тип, обращаясь к его конфигурации. MIME-типы, связанные с расширениями или путем анализа содержимого. Затем в HTTP-ответе отправляется заголовок, подобный следующему: Content-Type: text/html на одной странице, image/png для изображения или application/javascript для сценария.

Браузеры, основанные на таких движках, как Геккон Браузер Firefox обычно учитывает MIME-тип, объявленный сервером. Если сервер помечает файл с неправильным типом, браузер может... Не отображается должным образом или не запускаетсядаже несмотря на то, что расширение файла выглядит правильным.

Многие серверы по умолчанию отображают данные в виде обобщенных типов. text/plain o application/octet-stream для неизвестного контента. Это вызывает проблемы в современных веб-приложениях, когда администратор некорректно добавляет новые типы MIME, необходимые для определенных форматов или фреймворков.

MIME и безопасность: путаница типов и XSS

При обсуждении XSS-уязвимостей, связанных с MIME, проблема сводится к следующему: путаница типовЦель состоит в том, чтобы предотвратить интерпретацию файла, который должен рассматриваться как простое вложение или невыполненный текст, как... HTML или JavaScript через браузер.

скрипт после установки Linux
Теме статьи:
Bottles в Linux: практическое руководство по запуску приложений Windows

Если сервер, например, предоставляет файл с HTML- или JS-кодом, но помечает его как text/plainНекоторые браузеры могут попытаться определить фактический тип (например, путем анализа содержимого) и рассматривать его как... исполняемый кодДля снижения рисков используются заголовки, подобные следующим: X-Content-Type-Options: nosniff, что заставляет браузер соблюдать заявленный MIME-тип.

При анализе уязвимости сайта к XSS-атакам из-за путаницы MIME необходимо проверить, как передаются файлы, которые могут содержать эту уязвимость. контент, контролируемый пользователем (загрузки, предварительный просмотр и т. д.) и убедиться, что они всегда возвращаются с безопасным MIME-типом (например, text/plain (для неисполняемого текстового содержимого) и не позволяя браузеру угадывать более опасный тип.

MIME-типы в Linux: системные файлы и базы данных

В системах Linux MIME-типы важны не только для HTTP или электронной почты; они также используются на уровне настольных компьютеров для идентифицировать файлы и определить, какое приложение их откроет.Управление этим осуществляется посредством ряда стандартизированных файлов и баз данных, в значительной степени определяемых freedesktop.org.

Наиболее распространенные типы MIME-файлов в Linux

Файл /etc/mime.types Он содержит глобальный список MIME-типов и соответствующих им расширений файлов. Многие приложения используют его для определения типа файла исключительно по его имени. расширение.

En /usr/share/mime/packages/ Вы найдете подробные описания в формате XML, которые позволяют системе определить тип файла. не только из-за расширенияа также путем проверки содержимого. Это включает в себя такие файлы, как... freedesktop.org.xml со стандартными определениями.

Для пользовательских настроек укажите путь. ~/.local/share/mime/packages/ Это позволяет добавлять или перезаписывать типы MIME без влияния на глобальную конфигурацию. Любой размещенный там XML-файл может определять новые шаблоны или расширять существующие.

Расширения и сопоставление с типами MIME

В XML-файлах /usr/share/mime/packages/ и аналогичные маршруты используют элементы <glob> Для сопоставления расширений файлов с MIME-типами. Например, для добавления поддержки определенного расширения. .mp4a В случае аудиофайла в формате MP4 подобная строка может быть включена в определение файла. audio/mp4:

<glob pattern="*.mp4a"/>

Если расширение отсутствует в этой базе данных, проводник файлов может отобразить тип как неизвестноОднако, если MIME-тип был связан другими механизмами, система все равно может открыть его с помощью подходящего приложения.

MIME-файлы, файлы рабочего стола Linux и файлы .desktop

Рабочие среды Linux (GNOME, KDE, LXDE и т. д.) используют файлы. .desktop а также в списках MIME-типов для определения того, какая программа запускается при двойном щелчке по файлу.

Файл .desktop типичный для мультимедийного приложения, например MPlayerможет включать строку MimeType=... с огромным списком типов аудио и видео, с которыми он умеет работать, например. video/mp4, audio/m4a, video/x-matroska, audio/aac, и т.д.

Некоторые настольные компьютеры также создают файлы. пользовательский .desktop, например в ~/.local/share/applications/Это происходит, когда вы выбираете «Всегда открывать с помощью» в контекстном меню для определенного типа файлов. У таких файлов часто есть префиксы, например, userapp- чтобы указать, что это пользовательские ассоциации.

mimeapps.list и defaults.list

Чтобы решить, какое приложение будет рассмотрено по умолчанию Для MIME-типа списки представлены в формате: .list в качестве mimeapps.list y defaults.listОбычно их можно встретить на таких маршрутах, как:

  • ~/.config/mimeapps.list
  • ~/.local/share/applications/mimeapps.list
  • ~/.local/share/applications/defaults.list
  • /usr/local/share/applications/defaults.list
  • /usr/share/applications/defaults.list
  • /usr/share/applications/mimeinfo.cache

Эти файлы сопоставляют типы MIME с Файлы .desktopНапример, вы можете увидеть такие строки:

video/mp4=mplayer.desktop
audio/mp4=mplayer.desktop

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

Обновление баз данных MIME и .desktop

При изменении XML-файлов с определениями MIME или изменении ассоциаций многие инструменты не считывают эти файлы напрямую каждый раз, а вместо этого запрашивают информацию из этих файлов. кэшированные базы данныхВот почему такие коммунальные предприятия, как... update-mime-database y update-desktop-database.

Для восстановления глобальной базы данных MIME из /usr/share/mime/Вы можете запустить его от имени root:

update-mime-database -V /usr/share/mime/

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

update-mime-database -V $HOME/.local/share/mime/

Сходным образом, update-desktop-database Он просматривает файлы .desktop и генерирует кэши, например: mimeinfo.cacheкоторый используется во многих средах для ускорения поиска связей между MIME-типами и приложениями.

Как просмотреть MIME-тип файла в Linux

Если вы хотите узнать, к какому MIME-типу относится конкретный файл, наиболее прямая команда выглядит так: file с опцией --mime-type, Например:

file --mime-type logs.txt
logs.txt: text/plain

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

Настройка приложений по умолчанию с помощью xdg-mime

Помимо ручного редактирования файлов, на многих системах, основанных на freedesktop.org, можно использовать xdg-mime для более удобного сопоставления MIME-типов с предопределенными приложениями.

Например, если вы установили Okular y выказывать В качестве программы для просмотра PDF-файлов вы можете указать, что Evince будет использоваться по умолчанию. application/pdf связывание его с соответствующим файлом .desktop:

xdg-mime default evince.desktop application/pdf

В некоторых дистрибутивах для обеспечения доступности всех утилит, связанных с MIME, из терминала может потребоваться установка дополнительных пакетов, таких как... libfile-mimeinfo-perlкоторые предоставляют полезные команды и привязки для скриптов.

MIME на веб-серверах: конфигурация и пользовательские типы

На веб-серверах, таких как Apache, Nginx или IIS, управление MIME-типами осуществляется через Таблицы соответствия между расширениями и типамиСервер может работать только с зарегистрированными типами; если он не распознает расширение или не имеет связанного с ним типа, он может возвращать ошибки, например: 404.3 в IIS когда запрашивается ресурс неизвестного типа.

В средах с графическим управлением (например, при использовании панелей мониторинга, таких как Plesk на IIS) типы MIME можно добавлять или редактировать на уровне веб-сайт, виртуальный каталог или глобальная конфигурацияОбычно запрашивается следующее:

  • La расширение в списке файлов, начиная с точки или даже звездочки, если вы хотите включить все файлы.
  • El содержаниеТо есть, тип MIME, который будет связан с этим расширением, с возможностью выбора из списка или определения собственного типа.

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

Автозаполнение MIME и консоли (подробности сбоку)

Один из моментов, часто вызывающих путаницу, — это автозаполнение в терминале. Дело в том, что при вводе команды mplayer При нажатии клавиши Tab будут предложены файлы с определенными расширениями.avi, mp4, mkvи т. д.) не зависит напрямую от конфигурации MIME системы, а от завершение bash и специальные скрипты автозавершения.

Что такое суперблок Linux и как он работает?
Теме статьи:
Инструменты для тестирования производительности оборудования под управлением Linux для надежного тестирования.

Эти скрипты могут перечислять шаблоны расширений, используя выражения, подобные этим. @(mpg|avi|flv|webm|...) Таким образом, происходит фильтрация файлов, которые будут отображаться при нажатии клавиши Tab. Хотя это основано на идее типов файлов, это независимый из базы данных MIME, используемой настольными компьютерами и многими приложениями.

Как всё это взаимосвязано: электронная почта, настольные приложения, скрипты и серверы.

Объединяя все элементы воедино, MIME выступает в роли связующего звена, позволяющего всему, от простого электронного письма до сложного веб-сервера, понимать, как взаимодействовать. Чем они манипулируют и как с этим боротьсяВ электронных письмах опишите формат, кодировку и структуру сообщений, содержащих текст, вложения, HTML-код и цифровые подписи.

Для веб-сайтов заголовок Content-Type Правильная настройка сервера предотвращает неожиданности и проблемы с безопасностью, особенно в ситуациях, когда ошибка может привести к серьезным последствиям. исполняемый код предоставлен с неправильным типомВ Linux файлы .desktop, списки mimeapps.list и базы данных находятся в /usr/share/mime Они делают так, чтобы щелчок по файлу открывал его в нужном приложении, а скрипты и инструменты, такие как... file o xdg-mime Этот процесс можно автоматизировать.

Овладение этими понятиями, касающимися типов MIME, путей конфигурации, связанных команд и их роли в таких протоколах, как SMTP и HTTP, обеспечивает прочную основу для ответа на вопросы о XSS-уязвимостиПроблемы с отображением в браузерах или странное поведение при открытии файлов на рабочем столе Linux. Поделитесь информацией и помогите другим пользователям узнать больше о теме.