WordPress MIME Types – Uusien tiedostomuotojen lisääminen
WordPressin 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:
käyttää yleensä MIME-tyyppiä:
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:
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.
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.
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:
on tiedostonimi.
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:
Tuloksena voidaan saada esimerkiksi:
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:
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:
- tarkistaa käyttäjän oikeudet
- tarkistaa tiedostotyyppi
- validoida tiedosto
- sanitoida SVG
- 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ää:
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:
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:
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:
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ä.