Příručka:Detekce typu MIME
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).
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;
):
$wgProhibitedFileExtensions
- seznam přípon souborů$wgMimeTypeExclusions
- seznam zakázaných typů MIME
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: