Handleiding:MIME-type detectie
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).
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):
$wgProhibitedFileExtensions
- een lijst met bestandstypes$wgMimeTypeExclusions
- een lijst van verboden MIME-types
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: