@harrasteblogi JUURI NYT
--:--

Tilaa uutiskirje

Saat tuoreimmat 10 uusinta artikkelia kerran viikossa sähköpostiisi.

Tilaa uutiskirje

WordPress MIME Types – Uusien tiedostomuotojen lisääminen

WordPress MIME Types – Uusien tiedostomuotojen lisääminenWordPressin mediakirjasto ei hyväksy automaattisesti kaikkia mahdollisia tiedostomuotoja. Tämä on tarkoituksellista: tiedostotyyppien rajoittaminen vähentää väärien tiedostojen lataamista ja pienentää tietoturvariskejä.

Kehittäjä voi kuitenkin joutua lisäämään sivustolle uusia formaatteja. Esimerkiksi SVG, WebP, AVIF, JSON tai jokin organisaation oma tiedostomuoto voi olla tarpeellinen.

WordPressissä tätä hallitaan MIME Type -määrityksillä.

Mikä on MIME Type?

MIME Type kertoo, minkä tyyppisestä tiedostosta on kyse.

Esimerkiksi:

Tiedosto MIME Type
.jpg image/jpeg
.png image/png
.webp image/webp
.avif image/avif
.pdf application/pdf
.json application/json
.svg image/svg+xml

Tiedostopääte ja MIME Type ovat kaksi eri asiaa.

Esimerkiksi:

logo.svg

käyttää yleensä MIME-tyyppiä:

image/svg+xml

Miksi WordPress rajoittaa tiedostotyyppejä?

WordPressin oletusasetukset eivät salli kaikkien tiedostomuotojen lataamista.

Tähän on useita syitä:

  • tietoturva
  • väärien tiedostotyyppien estäminen
  • palvelinympäristön yhteensopivuus
  • selaintuen huomioiminen
  • ylläpidon helpottaminen

Uuden tiedostotyypin lisääminen kannattaa siksi tehdä vain silloin, kun sille on todellinen käyttötarve.

upload_mimes-filtteri

Yleisin tapa lisätä uusi tiedostomuoto on käyttää upload_mimes-filtteriä.

Esimerkiksi SVG:n lisääminen:

add_filter( ’upload_mimes’, ’my_custom_upload_mimes’ );
function my_custom_upload_mimes( $mimes ) {
$mimes[’svg’] = ’image/svg+xml’;
return $mimes;
}

Tämän jälkeen käyttäjät, joilla on oikeus ladata kyseisiä tiedostoja, voivat käyttää SVG-tiedostoja WordPressin upload-prosessissa.

Usean tiedostotyypin lisääminen

Samalla filtteriä voidaan käyttää useiden formaattien lisäämiseen.

add_filter( ’upload_mimes’, ’my_custom_upload_mimes’ );
function my_custom_upload_mimes( $mimes ) {
$mimes[’svg’] = ’image/svg+xml’;
$mimes[’json’] = ’application/json’;
return $mimes;
}

On kuitenkin hyvä lisätä vain ne formaatit, joita sivusto oikeasti tarvitsee.

Tiedostotyypin poistaminen

upload_mimes-filtteriä voidaan käyttää myös olemassa olevan tiedostotyypin poistamiseen.

add_filter( ’upload_mimes’, ’my_remove_upload_type’ );
function my_remove_upload_type( $mimes ) {
unset( $mimes[’svg’] );
return $mimes;
}

Tätä voidaan käyttää esimerkiksi silloin, kun sivustolla halutaan tiukentaa mediakirjaston sallittuja formaatteja.

MIME Type ei ole sama kuin tiedostopääte

On tärkeää ymmärtää ero:

file.pdf

on tiedostonimi.

application/pdf

on MIME Type.

WordPress käyttää näitä tietoja yhdessä tiedoston käsittelyssä.

Pelkkä tiedostopäätteen salliminen ei siis tarkoita, että kaikki kyseisellä päätteellä nimetyt tiedostot pitäisi automaattisesti hyväksyä.

wp_check_filetype()

WordPress tarjoaa myös funktion tiedoston tyypin tarkistamiseen:

$type = wp_check_filetype( ’example.webp’ );

Tuloksena voidaan saada esimerkiksi:

[
’ext’ => ’webp’,
’type’ => ’image/webp’,
]

Tämä on hyödyllinen erityisesti omissa upload- ja validointiprosesseissa.

wp_check_filetype_and_ext()

Pelkkään tiedostopäätteeseen perustuva tarkistus ei aina riitä.

WordPress tarjoaa tähän myös:

wp_check_filetype_and_ext()

Sen avulla voidaan tarkistaa tiedoston:

  • pääte
  • MIME Type
  • todellinen tiedostotyyppi
  • tiedoston sisältöön liittyviä ominaisuuksia

Tietoturvan kannalta tämä on tärkeä ero.

SVG vaatii erityistä huomiota

SVG on hyvä esimerkki formaatista, jonka kanssa kannattaa olla varovainen.

SVG ei ole tavallinen bittikarttakuva, vaan XML-pohjainen tiedosto, joka voi sisältää esimerkiksi:

  • XML-rakennetta
  • elementtejä
  • attribuutteja
  • tyylejä
  • linkkejä
  • skriptejä

Tästä syystä SVG:n salliminen WordPressissä ei ole pelkkä MIME Type -kysymys.

Jos käyttäjät voivat ladata SVG-tiedostoja, niiden sisältö kannattaa myös sanitoida.

SVG:n sanitointi

SVG-tiedostoja ei pidä käsitellä automaattisesti luotettavana kuvana.

Turvallisemmassa ratkaisussa voidaan:

  1. tarkistaa käyttäjän oikeudet
  2. tarkistaa tiedostotyyppi
  3. validoida tiedosto
  4. sanitoida SVG
  5. tallentaa tiedosto vasta sen jälkeen

SVG-sanitointiin voidaan käyttää tarkoitukseen suunniteltua ratkaisua sen sijaan, että XML:ää yritetään puhdistaa muutamalla tekstinkorvauksella.

WebP ja AVIF

Modernit kuvamuodot ovat hyvä esimerkki MIME Type -hallinnan käytöstä.

WebP käyttää:

image/webp

AVIF:

image/avif

Näitä voidaan käyttää WordPressissä kuvien optimointiin, mutta formaatin tukeminen riippuu myös WordPress-versiosta, palvelimen kuvaenkooderista ja selaimesta.

Pelkkä uploadin salliminen ei siis vielä takaa, että WordPress pystyy käsittelemään kuvaa kaikissa käyttötarkoituksissa.

WordPress Multisite

Multisite-ympäristössä tiedostotyyppien hallintaan liittyy lisäksi verkonlaajuisia asetuksia.

Verkon ylläpitäjä voi määrittää, mitä tiedostotyyppejä sivustot saavat käyttää.

Tämä kannattaa huomioida erityisesti silloin, kun oma MIME Type -ratkaisu toimii tavallisessa WordPress-asennuksessa mutta ei Multisite-ympäristössä odotetulla tavalla.

Käyttöoikeudet

Uuden MIME Typen lisääminen ei tarkoita, että jokainen käyttäjä saa automaattisesti rajattomat upload-oikeudet.

Tiedostojen lataamiseen liittyvät käyttöoikeudet ovat erillinen asia.

Mukautetussa upload-prosessissa kannattaa tarkistaa esimerkiksi:

if ( ! current_user_can( ’upload_files’ ) ) {
return;
}

Käyttöoikeudet tulee tarkistaa palvelinpuolella, ei pelkästään käyttöliittymässä.

MIME Type ja REST API

Jos tiedostoja ladataan WordPressiin REST API:n kautta, myös API-pohjainen upload-prosessi pitää testata erikseen.

Tärkeää on varmistaa:

  • tiedostomuoto hyväksytään
  • autentikointi toimii
  • käyttöoikeudet ovat kunnossa
  • tiedosto validoidaan
  • MIME Type käsitellään oikein

Hallintapaneelissa toimiva upload ei automaattisesti tarkoita, että sama toteutus toimii oikein REST API:n kautta.

MIME Type ja WordPress Media Library

Kun tiedosto hyväksytään, WordPress voi luoda siitä attachmentin.

Prosessiin liittyvät esimerkiksi:

  • attachment-tietue
  • MIME Type
  • tiedoston URL
  • metadata
  • mahdolliset kuvakoot

Kuvien tapauksessa WordPress voi lisäksi muodostaa Attachment Metadata -tietoja ja uusia kuvakokoja.

Tiedostotyypin lisääminen ei tee formaatista täysin tuettua

Tämä on yleinen väärinkäsitys.

Jos lisäät esimerkiksi:

$mimes[’xyz’] = ’application/octet-stream’;

se ei tarkoita, että WordPress tietäisi automaattisesti:

  • miten tiedosto näytetään
  • miten sitä käsitellään
  • miten sen metadata muodostetaan
  • miten selain avaa tiedoston
  • miten tiedosto indeksoidaan
  • miten tiedosto muunnetaan

MIME Type kertoo ensisijaisesti tiedostotyypin. Varsinainen toiminnallisuus pitää toteuttaa erikseen.

Tiedostotyypin poistaminen käytöstä

Jos sivustolla ei tarvita tiettyjä formaatteja, niiden sallimista kannattaa harkita uudelleen.

Esimerkiksi:

add_filter( ’upload_mimes’, ’my_restrict_mimes’ );
function my_restrict_mimes( $mimes ) {
unset( $mimes[’svg’] );
unset( $mimes[’json’] );
return $mimes;
}

Tiukempi tiedostopolitiikka voi olla järkevä erityisesti sivustoilla, joissa suuri määrä käyttäjiä voi ladata tiedostoja.

Yleisimmät virheet

MIME Type -määrityksissä tehdään usein samoja virheitä.

Tyypillisiä ongelmia ovat:

  • tiedostotyypin salliminen ilman käyttötarvetta
  • SVG:n salliminen ilman sanitointia
  • luottaminen pelkkään tiedostopäätteeseen
  • MIME Typen sekoittaminen tiedostonimeen
  • palvelimen tiedostotyyppirajoitusten unohtaminen
  • REST API -uploadin testaamatta jättäminen
  • käyttöoikeuksien puutteellinen tarkistus

Erityisesti käyttäjien lähettämien tiedostojen kohdalla turvallisuus kannattaa asettaa helppouden edelle.

Parhaat käytännöt

Uusien tiedostomuotojen lisäämisessä kannattaa:

  • lisää vain tarvittavat MIME Typet
  • käytä upload_mimes-filtteriä tarkoituksenmukaisesti
  • tarkista tiedostot myös muilla WordPressin validointimekanismeilla
  • käsittele SVG:tä erityistapauksena
  • tarkista käyttäjän käyttöoikeudet
  • testaa sekä Media Library että mahdolliset API-uploadit
  • varmista palvelimen ja selainten yhteensopivuus
  • dokumentoi lisätyt tiedostomuodot

Näin uusi formaatti voidaan ottaa käyttöön ilman, että upload-järjestelmää avataan tarpeettomasti.

Milloin uusia MIME-tyyppejä kannattaa lisätä?

Uusi tiedostomuoto on perusteltu esimerkiksi silloin, kun sivusto käsittelee:

  • moderneja kuvaformaatteja
  • dokumentteja
  • suunnittelutiedostoja
  • organisaation omia tiedostoformaatteja
  • API-integraatioiden tiedostoja
  • ladattavia digitaalisia tuotteita

Jos tiedostomuotoa tarvitaan vain kerran, sen lisääminen pysyvästi WordPressin sallittuihin tyyppeihin ei välttämättä ole paras ratkaisu.

Yhteenveto

WordPressin MIME Type -hallinta mahdollistaa uusien tiedostomuotojen lisäämisen mediakirjastoon ja mukautettuihin upload-prosesseihin. Yleisin tapa on käyttää upload_mimes-filtteriä, mutta pelkkä MIME Typen lisääminen ei vielä tee tiedostomuodosta täysin WordPress-yhteensopivaa.

Erityisesti käyttäjien lähettämissä tiedostoissa kannattaa huomioida tiedoston validointi, käyttöoikeudet ja tietoturva. SVG on tästä hyvä esimerkki: sen salliminen vaatii enemmän harkintaa kuin tavallisen kuvatiedoston.

Kun uusi tiedostomuoto lisätään vain todelliseen tarpeeseen ja koko upload-ketju testataan, WordPressin mediakirjastoa voidaan laajentaa hallitusti ilman tarpeettomia tietoturvariskejä.

🤖 Tämä sisältö on tuotettu tekoälyn avulla. Tarkista tiedot alkuperäisistä lähteistä ennen niiden hyödyntämistä.
🍪