Příručka:Detekce typu MIME

From mediawiki.org
This page is a translated version of the page Manual:MIME type detection and the translation is 100% complete.

MediaWiki se pokouší detekovat MIME type souborů, které nahráváte, a odmítne soubor, pokud přípona souboru neodpovídá typu MIME ("Soubor je poškozený nebo má nesprávné rozšíření"). Pokud se tato chyba zobrazuje u platných souborů, zkuste použít externí příkaz pro zjištění typu MIME (viz níže).

Před voláním nakonfigurované metody pro detekci MIME se použijí některé pevně zakódované kontroly. Pomocí debug logging zjistěte, zda tyto kontroly nezpůsobují falešně pozitivní výsledky. (Například MediaWiki 1.15.3 může chybně rozpoznat soubory .doc z MS Word 2007 jako soubory ZIP.)

Pro konfiguraci, které typy souborů bude MediaWiki přijímat pro nahrávání, použijte $wgFileExtensions .

Detekce MIME

Pokud je nainstalována, MediaWiki používá modul FileInfo PHP nebo starší modul MimeMagic. Pokud se vám zobrazuje chyba jako mime_magic nelze inicializovat, magický soubor není dostupný, tento modul není správně nakonfigurován — informace o tom, jak to opravit, najdete v dokumentaci PHP nebo místo toho použijte příkaz externího detektoru MIME (viz níže).

Alternativně lze nakonfigurovat externí příkaz pro detekci typu MIME nastavením možnosti $wgMimeDetectorCommand . Nejběžnější nastavení je:

$wgMimeDetectorCommand = "file -bi"; # na Linuxu
$wgMimeDetectorCommand = "file -bI"; # na macOS

To používá nástroj GNU file k určení typu souboru, který by měl v Linuxu okamžitě fungovat. Pamatujte, že utilita file poskytovaná jinými Unixy nemusí podporovat volbu -i, a proto nebude fungovat. Nástroj GNU file je také dostupný pro Mac OS-X a pro Windows prostřednictvím Cygwin.

Pokud není nainstalován žádný modul MIME a není nakonfigurován žádný příkaz externího detektoru MIME, spoléhá MediaWiki na modul PHP GD k detekci typu MIME. Všimněte si, že to funguje pouze pro některé dobře známé typy obrázků (viz [1]), ostatní soubory budou akceptovány bez jakýchkoli dalších kontrol!

Kontrolu typu MIME můžete také úplně zakázat nastavením $wgVerifyMimeType = false; — všimněte si však, že je to velmi nejisté: libovolné soubory pak mohou být nahrány s "neškodnou" příponou souboru, ale přesto mohou být spouštěny/interpretovány škodlivým způsobem na klientském počítači nebo na webovém serveru. Nevyřízeno: Jak to souvisí s $wgCheckFileExtensions ?

Zlepšení detekce typu MIME

V případě chybné detekce specifičtějších typů, jako je chemical/x-jcamp-dx jako text/plain MimeMagicImproveFromExtension nebo MimeMagicGuessFromContent , může být užitečné:

/**
 * Příklad pro přidání extra detekce mime na základě přípony souboru přes LocalSettings.php
 * @param MimeAnalyzer $mimeAnalyzer
 * @param str $ext: File extension.
 * @param str &$mime: MIME type (out).
 */
$wgHooks['MimeMagicImproveFromExtension'][] = static function ( $mimeAnalyzer, $ext, &$mime ) {
    if ( in_array( $ext, ['dx', 'jdx', 'jcm'] ) ) {
        $mime = 'chemical/x-jcamp-dx';
    }
};
/**
 * Příklad pro přidání extra detekce mime na základě obsahu souboru přes LocalSettings.php
 * @param MimeAnalyzer $mimeAnalyzer
 * @param str &$head: 1024 bytes of the file in a string (in - Do not alter!).
 * @param str &$tail: More or equal than last 65558 bytes of the file in a string (in - Do not alter!).
 * @param str $file: File path.
 * @param str &$mime: MIME type (out).
 */
$wgHooks['MimeMagicGuessFromContent'][] = static function ( $mimeAnalyzer, &$head, &$tail, $file, &$mime ) {
    if ( str_contains( $head, '##JCAMP' ) ) {
        $mime = 'chemical/x-jcamp-dx';
    }
};

Ověření typu MIME

MediaWiki ukládá své výchozí typy MIME a typy médií v MimeMap.php.

Pro podporu dalších typů MIME pro nahrávání na vaši wiki můžete od MediaWiki 1.24 použít háček MimeMagicInit .

/**
 * Příklad pro přidání dalších typů MIME přes LocalSettings.php
 * @param MimeAnalyzer $mime
 */
$wgHooks['MimeMagicInit'][] = static function ( $mime ) {
    $mime->addExtraTypes( 'text/plain md' );
    $mime->addExtraInfo( 'text/example [OFFICE]' );
};

Extra typy

Typ MIME definuje přípony souborů, které jsou povoleny pro daný typ MIME. Rozpoznání souborů .md jako text/plain pro Markdown:

$mime->addExtraTypes( 'text/plain md' );

Nezapomeňte také přidat rozšíření do $wgFileExtensions , abyste jej mohli použít pro nová nahrávání na vaši wiki.

Můžete také zadat více přípon souborů, například následující je to, co by MediaWiki interně udělala pro JPEG:

$mime->addExtraTypes( 'image/jpeg jpg jpeg jpe' );

Upozorňujeme, že typ MIME některých formátů souborů může být detekován příliš široce – jakýkoli formát založený na XML se může zobrazit jako text/xml, jakýkoli formát založený na ZIP jako application/zip. V důsledku toho musí být přípony souborů pro takové formáty spojeny s jejich širším typem MIME, např.:

text/xml xml xsl xslt rss rdf
application/zip zip jar xpi
application/msword doc xls ppt

Další informace

Data "mime info" se používají k rozlišení aliasů pro typy MIME a k přiřazení typu média k nim. Obsahuje jeden řádek na typ mime. Položka první na řádku je kanonický název typu MIME (který bude použit interně), položka poslední má tvar [XXX] a definuje typ média pro typ MIME.

Chcete-li přiřadit text/example pod typ média "OFFICE":

$mime->addExtraInfo( 'text/example [OFFICE]' );

Příklady použití:

image/png image/x-png	[BITMAP]
image/svg image/svg+xml application/svg+xml application/svg	[DRAWING]
audio/mp3 audio/mpeg3 audio/mpeg	[AUDIO]

Všimněte si, že pro soubory OGG je typ média určen programově: AUDIO pro vorbis, VIDEO pro theora, MULTIMEDIA jinak.

Typ média je specifický pro MediaWiki a určuje, jaký druh média je v souboru obsažen, na rozdíl od toho, v jakém formátu je soubor. Tyto informace jsou uloženy v tabulce image spolu s typem MIME. Prozatím se moc nepoužívá, ale v budoucnu by mohl být využit při určování, jak bude ten který soubor uživatelům zobrazován. Jsou definovány následující typy:

UNKNOWN neznámý formát
BITMAP nějaký bitmapový obrázek nebo zdroj obrázku (jako psd atd.). Nelze zvětšit.
DRAWING vektorová kresba (SVG, WMF, PS, ...) nebo zdroj obrázku (oo-draw atd.). Lze zvětšit.
AUDIO jednoduchý zvukový soubor (ogg, mp3, wav, midi, cokoliv)
VIDEO jednoduchý video soubor (ogg, mpg atd.; nezahrnujte zde formáty, které mohou obsahovat spustitelné sekce nebo skripty!)
MULTIMEDIA skriptovatelná multimédia (flash, pokročilé formáty video kontejnerů atd.)
OFFICE kancelářské dokumenty, tabulky (kancelářské formáty, které mohou obsahovat aplety, skripty atd.)
TEXT prostý text (případně obsahující programový kód nebo skripty)
EXECUTABLE binární spustitelný soubor
ARCHIVE archivní soubor (zip, tar atd.)

Zakázané soubory

Kromě možnosti $wgFileExtensions mohou následující nastavení způsobit odmítnutí souborů (i když je nastaveno $wgStrictFileExtensions = false;):

Kromě toho MediaWiki odmítá všechny soubory, které vypadají jako skripty, které by mohly být náhodně spuštěny buď na webovém serveru nebo v prohlížeči uživatele. Kromě toho MediaWiki odmítá všechny soubory, které vypadají jako skripty, které by mohly být náhodně spuštěny buď na webovém serveru nebo v prohlížeči uživatele. Upozorňujeme, že detekce HTML a JavaScriptu je poměrně široká a může hlásit falešně pozitivní výsledky — je tomu tak proto, že je známo, že prohlížeč Microsoft Internet Explorer interpretuje soubory, které vypadají jako HTML, bez ohledu na příponu souboru nebo typ MIME nahlášený webovým serverem, což by vedlo k tomu, že by byl web zranitelný vůči cross -site scripting útokům. Pokud opravdu chcete povolit i takové nebezpečné soubory, můžete hacknout funkci detectScript v souboru UploadBase.php a vždy vrátit hodnotu false.

Antivirové kontroly

Čekající. Prozatím viz $wgAntivirus a $wgAntivirusSetup

Typy MIME při stahování

Všimněte si, že typ MIME použitý, když je skutečný soubor poskytován prohlížeči uživatele, není určen detekcí MIME MediaWiki: Soubory nejsou poskytovány prostřednictvím MediaWiki, ale přímo webovým serverem. Webový server tedy musí být nakonfigurován tak, aby používal správný typ MIME pro každou příponu souboru – například pokud máte potíže se zobrazením souborů SVG ve vašem prohlížeči, ujistěte se, že je server nakonfigurován tak, aby je doručoval jako image/svg+xml. (Pro Apache si přečtěte na stránce mod_mime.)

Související odkazy

Starší diskuze o meta: