Jump to content

Handleiding:MIME-type detectie

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

MediaWiki probeert het MIME-type te bepalen van de bestanden die u uploadt, en weigert het bestand als de extensie niet overeenkomt met het MIME-type ("Het bestand is beschadigd of heeft een onjuiste extensie"). Als u deze fout voor geldige bestanden krijgt, probeer dan een externe opdracht te gebruiken om het type MIME te detecteren (zie hieronder).

Voordat de geconfigureerde methode voor MIME-detectie wordt opgeroepen, worden enkele hardcoded controles uitgevoerd. Gebruik debug logging om erachter te komen of deze controles vals-positieven veroorzaken. (MediaWiki 1.15.3 kan bijvoorbeeld een doc-bestand uit MS Word 2007 foutief als ZIP-bestand detecteren.)

Om te bepalen welke typen bestanden MediaWiki accepteert voor uploads, gebruik $wgFileExtensions .

MIME detectie

MediaWiki gebruikt de module FileInfo van PHP (indien geïnstalleerd) of de oudere module MimeMagic. Als u een foutmelding krijgt als mime_magic kan niet worden geïnitialiseerd, magisch bestand is niet beschikbaar, is deze module niet correct geconfigureerd - raadpleeg de PHP-documentatie voor informatie over hoe u dit kunt oplossen, of gebruik in plaats daarvan een externe opdracht (zie hieronder) om het MIME-type te bepalen.

Als alternatief kan een externe opdracht worden geconfigureerd om het MIME-type te detecteren door de optie $wgMimeDetectorCommand in te stellen. De meest voorkomende instelling is:

$wgMimeDetectorCommand = "file -bi"; # op Linux
$wgMimeDetectorCommand = "file -bI"; # op macOS

Dit gebruikt het GNU hulpprogramma file om het type van het bestand te bepalen, dat meteen zou moeten werken onder Linux. Merk op dat de utility file die door andere Unix-varianten wordt aangeboden, de -i-optie mogelijk niet ondersteunt en dus niet zal werken. Het GNU utility file is ook beschikbaar voor Mac OS-X, en voor Windows via Cygwin.

Als er geen MIME-module is geïnstalleerd en geen externe MIME-detectie commando is ingesteld, vertrouwt MediaWiki op de module GD van PHP om het MIME-type te detecteren. Let op dat dit alleen werkt voor sommige bekende afbeeldingstypes (zie [1]), andere bestanden worden zonder extra controle geaccepteerd!

U kunt ook de MIME-typecontrole volledig uitschakelen door $wgVerifyMimeType = false; in te stellen - let echter op dat dit zeer onveilig is: willekeurige bestanden kunnen dan worden geüpload met een "onschuldige" extensie, maar kunnen juist dan op de cliëntcomputer of de webserver op een schadelijke manier worden uitgevoerd/interpreteert. Hoe heeft dit nu betrekking op $wgCheckFileExtensions ?

MIME-type detectie verbeteren

In geval van een verkeerde detectie van meer specifieke typen zoals chemical/x-jcamp-dx als text/plain kunnen MimeMagicImproveFromExtension of MimeMagicGuessFromContent nuttig zijn:

/**
 * Voorbeeld voor het toevoegen van extra bestandsextensie op basis van MIME detectie via 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';
    }
};
/**
 * Voorbeeld van het toevoegen van extra bestandsinhoud gebaseerd op MIME detectie via 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';
    }
};

MIME-type validatie

MediaWiki slaat de standaard MIME-types en mediatypes op in MimeMap.php.

Om extra MIME-types voor uploads op uw wiki te ondersteunen, kunt u vanaf MediaWiki 1.24 de hook MimeMagicInit gebruiken.

/**
 * Voorbeeld voor het toevoegen van extra MIME-types via LocalSettings.php
 * @param MimeAnalyzer $mime
 */
$wgHooks['MimeMagicInit'][] = static function ( $mime ) {
    $mime->addExtraTypes( 'text/plain md' );
    $mime->addExtraInfo( 'text/example [OFFICE]' );
};

Extra types

Het bestand dat per MIME-type definieert welke bestandsextensties zijn. Om .md bestanden als text/plain voor Markdown te herkennen:

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

Vergeet niet om de extensie ook toe te voegen aan $wgFileExtensions om het te laten gebruiken voor nieuwe uploads op uw wiki.

U kunt ook meerdere extensies specificeren, bijvoorbeeld het volgende is wat MediaWiki intern zou hebben gedaan voor JPEG:

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

Merk op dat het MIME-type van sommige bestandsindelingen te breed kan worden gedetecteerd - elk op XML gebaseerd formaat kan worden weergegeven als text/xml, elk op ZIP gebaseerd formaat als application/zip. De bestandsextensies voor dergelijke formaten moeten derhalve worden geassocieerd met hun bredere MIME-type, bijvoorbeeld:

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

Meer info

De "mime info"-gegevens worden gebruikt om "aliassen" voor MIME-typen op te lossen en er een "mediatype" aan toe te wijzen. Het bevat één regel per MIME-type; het eerste item op de regel is de canonieke MIME-typenaam (die intern zal worden gebruikt), het laatste item heeft de vorm [XXX] en definieert het mediatype voor het MIME-type.

Om text/example toe te wijzen onder het mediatype "OFFICE":

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

Enkele voorbeelden:

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

Merk op dat voor OGG bestanden, het mediatype programmatisch wordt bepaald: AUDIO voor vorbis, VIDEO voor theora, MULTIMEDIA anderszins.

Het mediatype is specifiek voor MediaWiki en bepaalt wat voor soort media er in het bestand zit, in tegenstelling tot het formaat waarin het bestand zich bevindt. Deze informatie wordt opgeslagen in de tabel image , samen met het MIME-type. Het is momenteel niet veel gebruikt, maar het is in de toekomst mogelijk om te bepalen hoe een bestand gepresenteerd moet worden aan de gebruiker. De volgende types zijn gedefinieerd:

UNKNOWN onbekend formaat
BITMAP een bitmapafbeelding of afbeeldingsbron (zoals psd, enz.). Kan niet geschaald worden.
DRAWING een vectortekening (SVG, WMF, PS,...) of afbeeldingsbron (oo-draw, enz.). Kan opschalen.
AUDIO eenvoudig audiobestand (OGG, MP3, WAV, MIDI, ...)
VIDEO eenvoudig videobestand (OGG, MPG, enz.; neem hier geen formaten op die uitvoerbare secties of scripts kunnen bevatten!)
MULTIMEDIA Scriptbare multimedia (flash, geavanceerde videocontainerformaten, enz.)
OFFICE Office documenten, spreadsheets (office-formaten die eventueel applets, scripts, enz.) bevatten
TEXT platte tekst (mogelijk met programmacode of scripts)
EXECUTABLE binaire executable
ARCHIVE archiefbestand (zip, tar, enz.)

Verboden bestanden

Naast de optie $wgFileExtensions kunnen de volgende instellingen ervoor zorgen dat bestanden worden afgewezen (zelfs als $wgStrictFileExtensions = false; is ingesteld):

Bovendien weigert MediaWiki alle bestanden die lijken op scripts die per ongeluk kunnen worden uitgevoerd op de webserver of de browser van de gebruiker. Met name alles wat lijkt op een van de volgende formaten wordt geweigerd, ongeacht het gedetecteerde MIME-type of de bestandsextensie: HTML, JavaScript, PHP, shellscripts. Merk op dat de detectie van HTML en JavaScript vrij breed is en valse positieven kan rapporteren - dit komt omdat de Microsoft Internet Explorer bekend staat om het interpreteren van bestanden die op HTML lijken, ongeacht de bestandsextensie of het MIME-type dat door de webserver wordt gerapporteerd, wat ertoe zou leiden dat de site kwetsbaar is voor cross-site scripting aanvallen. Als u zelfs dergelijke gevaarlijke bestanden echt wilt toestaan, kunt u de functie detectScript in het bestand UploadBase.php hacken om altijd false terug te geven.

Virusscans

Lopend. Voorlopig, zie $wgAntivirus en $wgAntivirusSetup

MIME-types bij downloaden

Merk op dat het MIME-type dat wordt gebruikt wanneer het eigenlijke bestand wordt aangeboden aan de browser van de gebruiker niet bepaald door MediaWiki's MIME-detectie: bestanden worden niet via MediaWiki aangeboden, maar rechtstreeks door de webserver. De webserver moet dus worden geconfigureerd worden om het juiste MIME-type voor elke bestandsextensie te gebruiken - bijvoorbeeld, als u problemen ondervindt met het bekijken van SVG-bestanden in uw browser, zorg ervoor dat de server is geconfigureerd om ze te leveren als image/svg+xml. (Voor Apache, lees mod_mime.)

Zie ook

Oudere discussie op Meta: