Ero sivun ”Unicode” versioiden välillä
Siirry navigaatioon
Siirry hakuun
tietoturvaongelmat
Pb (keskustelu | muokkaukset) p (→[[Tiedostojärjestelmä]]t: wikilinkkejä) |
LP (keskustelu | muokkaukset) (tietoturvaongelmat) |
||
Rivi 8: | Rivi 8: | ||
Unicode pyrkii ratkaisemaan vanhojen merkistöjen rajallisuuteen liittyvät ongelmat luomalla merkistön, joka sisältää kaikki nykyiset (ja jopa entiset) kirjoitusjärjestelmät. Unicode-standardi käsittää 1 114 112 merkkipaikkaa, ja ne yksilöidään U+xxxx-muotoisella tunnuksella, jossa ”xxxx” on merkin numerokoodi heksadesimaalimuodossa (16-järjestelmä). Mahdolliset koodit ovat U+0000..U+10FFFF. Käytännössä ihan jokainen merkkipaikka ei viittaa mihinkään kirjoitusmerkkiin, vaan mukana on jonkin verran myös erilaisia ohjauskoodeja tietokonetta varten sekä Unicode-standardiin liittyvää erikoistietoa. Joka tapauksessa merkkipaikkoja on niin paljon, että kaikki olemassa olevat ja jo historiaan jääneet kirjoitusmerkit mahtuvan mukaan. Tästä huolimatta merkkipaikkoja on runsaasti tyhjillään tulevaisuuden varalta ja kaikkia tuskin tarvitaan koskaan. Mukana on myös suuri joukko tarkoituksella määrittelemättömiä, yksityiseen käyttöön varattuja merkkipaikkoja. | Unicode pyrkii ratkaisemaan vanhojen merkistöjen rajallisuuteen liittyvät ongelmat luomalla merkistön, joka sisältää kaikki nykyiset (ja jopa entiset) kirjoitusjärjestelmät. Unicode-standardi käsittää 1 114 112 merkkipaikkaa, ja ne yksilöidään U+xxxx-muotoisella tunnuksella, jossa ”xxxx” on merkin numerokoodi heksadesimaalimuodossa (16-järjestelmä). Mahdolliset koodit ovat U+0000..U+10FFFF. Käytännössä ihan jokainen merkkipaikka ei viittaa mihinkään kirjoitusmerkkiin, vaan mukana on jonkin verran myös erilaisia ohjauskoodeja tietokonetta varten sekä Unicode-standardiin liittyvää erikoistietoa. Joka tapauksessa merkkipaikkoja on niin paljon, että kaikki olemassa olevat ja jo historiaan jääneet kirjoitusmerkit mahtuvan mukaan. Tästä huolimatta merkkipaikkoja on runsaasti tyhjillään tulevaisuuden varalta ja kaikkia tuskin tarvitaan koskaan. Mukana on myös suuri joukko tarkoituksella määrittelemättömiä, yksityiseen käyttöön varattuja merkkipaikkoja. | ||
Unicode-merkkejä sisältävää tekstiä voidaan tallentaa tietokoneelle useilla eri tavoilla. Linuxissa ja yleensäkin tietoliikenteessä käytetty Unicoden koodaustapa on nimeltään '''UTF-8'''. Tässä koodauksessa yksi Unicode-merkki vie tallennustilaa 1–4 oktettia eli 8 bitin tavua. ASCII-merkistöön kuuluvat merkit (U+0000..U+007F) esitetään UTF-8:ssa sellaisenaan, yhtenä tavuna, joten ASCII on täysin UTF-8-yhteensopiva. Se onkin Linuxissa tärkeää, koska siinä käytetään paljon ASCII-muodossa olevia asetustiedostoja ja käynnistysskriptejä. Muiden kuin ASCII-merkkien esittämiseksi tarvitaan avuksi lisätavuja, ja esimerkiksi suomen kieleen kuuluvien ä- ja ö-kirjainten esittämiseen tarvitaan kaksi tavua. | Unicode-merkkejä sisältävää tekstiä voidaan tallentaa tietokoneelle useilla eri tavoilla. Linuxissa ja yleensäkin tietoliikenteessä käytetty Unicoden koodaustapa on nimeltään '''[[UTF-8]]'''. Tässä koodauksessa yksi Unicode-merkki vie tallennustilaa 1–4 oktettia eli 8 bitin tavua. ASCII-merkistöön kuuluvat merkit (U+0000..U+007F) esitetään UTF-8:ssa sellaisenaan, yhtenä tavuna, joten ASCII on täysin UTF-8-yhteensopiva. Se onkin Linuxissa tärkeää, koska siinä käytetään paljon ASCII-muodossa olevia asetustiedostoja ja käynnistysskriptejä. Muiden kuin ASCII-merkkien esittämiseksi tarvitaan avuksi lisätavuja, ja esimerkiksi suomen kieleen kuuluvien ä- ja ö-kirjainten esittämiseen tarvitaan kaksi tavua. | ||
UTF-8:n lisäksi on olemassa muitakin koodaustapoja, esimerkiksi UTF-16 ja UTF-32. UTF-16:ssa merkit esitetään joko yhtenä 16-bittisenä lukuna, tai mikäli merkin koodi on sitä suurempi, niin kahden 16-bittisen luvun muodostamana nk. sijaismerkkiparina (surrogate pair). UTF-32:ssa merkki esitetään aina yhtenä 32-bittisenä lukuna. Kuten todettu, Linuxissa käytetään pääasiassa UTF-8:aa. Ohjelmat voivat kuitenkin sisäisesti käyttää muitakin koodaustapoja, ja ohjelmien tekijät voivat vapaasti valita omaan ohjelmaansa sopivan tavan tallentaa tietoa. | UTF-8:n lisäksi on olemassa muitakin koodaustapoja, esimerkiksi UTF-16 ja UTF-32. UTF-16:ssa merkit esitetään joko yhtenä 16-bittisenä lukuna, tai mikäli merkin koodi on sitä suurempi, niin kahden 16-bittisen luvun muodostamana nk. sijaismerkkiparina (surrogate pair). UTF-32:ssa merkki esitetään aina yhtenä 32-bittisenä lukuna. Kuten todettu, Linuxissa käytetään pääasiassa UTF-8:aa. Ohjelmat voivat kuitenkin sisäisesti käyttää muitakin koodaustapoja, ja ohjelmien tekijät voivat vapaasti valita omaan ohjelmaansa sopivan tavan tallentaa tietoa. | ||
Rivi 60: | Rivi 60: | ||
Eräät, varsinkin vanhemmat, ohjelmat eivät hallitse UTF-8-merkistökoodauksen käyttöä. Tällaisia ovat mm. uutistenlukija [[slrn]] ja vanhemmat versiot [[Nano]]sta. Slrn tosin osaa näyttää UTF-8:lla koodatut kirjoitukset oikein siinä määrin kun niissä olevat merkit sopivat johonkin kahdeksanbittiseen merkistöön, mutta ei toimi mikäli pääteikkunassakin on UTF-8 käytössä. | Eräät, varsinkin vanhemmat, ohjelmat eivät hallitse UTF-8-merkistökoodauksen käyttöä. Tällaisia ovat mm. uutistenlukija [[slrn]] ja vanhemmat versiot [[Nano]]sta. Slrn tosin osaa näyttää UTF-8:lla koodatut kirjoitukset oikein siinä määrin kun niissä olevat merkit sopivat johonkin kahdeksanbittiseen merkistöön, mutta ei toimi mikäli pääteikkunassakin on UTF-8 käytössä. | ||
Tällaista ohjelmaa voi käyttää luit-ohjelman avulla esimerkiksi näin. | Tällaista ohjelmaa voi käyttää [[luit]]-ohjelman avulla esimerkiksi näin. | ||
LC_ALL=en_US.ISO-8859-1 luit ohjelmannimi | LC_ALL=en_US.ISO-8859-1 luit ohjelmannimi | ||
Samaa komentoa voi käyttää myös ottaessasi ssh-yhteyden sellaiseen koneeseen, jossa käytetään jotakin 8-bittistä merkistöä. | Samaa komentoa voi käyttää myös ottaessasi ssh-yhteyden sellaiseen koneeseen, jossa käytetään jotakin 8-bittistä merkistöä. | ||
Rivi 106: | Rivi 106: | ||
Asetuksista voi määritellä merkistöksi UTF-8:n, tukee myös merkistön automaattista tunnistusta. | Asetuksista voi määritellä merkistöksi UTF-8:n, tukee myös merkistön automaattista tunnistusta. | ||
== Tietoturva == | |||
Unicode tuo mukanaan joukon tietoturvaongelmia, ennen kautta siksi, että se on niin monimutkainen, eikä monikaan ohjelmoija ymmärrä kaikkia niitä mekanismeja, joita tarvitaan hänelle tuntemattomissa kielissä. Perustavanlaatuinen ongelma on, että merkkijonon pituus merkkeinä ei sano paljoakaan sen pituudesta ruudulla (tasaleveälläkään kirjamisella) tai tavuina – eikä päinvastoinkaan. Väärien oletusten varassa toimivat ohjelmat ja [[kirjasto|ohjelmakirjastot]] saattavat olla alttiita puskuriyliovuodoille yms. Tässä muutamia muita ongelmia: | |||
Samaa merkkiä voidaan esittää eri tavoilla, esimerkiksi "ä" sellaisenaan tai "a":n ja pisteiden yhdistelmänä (tämä on ongelmallista myös merkkijonoja etsittäessä [[grep]]illä tms.). Jos merkkien esitystapaa muutetaan sen jälkeen, kun niiden vaarattomuus on tarkistettu, tarkistuksen voi ohittaa. Yksinkertaistettu algoritmi saattaa myös hyväksyä kiellettyjä koodaustapoja, joilla esimerkiksi ASCII-merkkejä voidaan koodata useammassa tavussa tarkistusten ohittamiseksi. | |||
Näytöllä vaarattomalta näyttävä merkkijono on saatettu muodostaa käyttäen lähes samalta näyttäviä merkkejä, joilla kuitenkin on eri merkitys (vrt nokia.com vs. nokía.com). Vastaavaa voi saada aikaan kirjoitussuunnalla kikkailemalla. | |||
==Eräitä Unicode-merkkejä== | ==Eräitä Unicode-merkkejä== |