Sivulleni voi ladata kuvia, joiden koko ja pääte (.jpg tms.)tarkastetaan.
Sivulleni on tullut mainostuksen jälkeen virheellisiä kuvia, jotka luultavasti sisältävät jotain haitallista, esim. viruksia tms.
Miten saan tehtyä PHP-koodin, joka tunnistaa nämä "feikki"-kuvat, ja ei päästä niitä palvelimelle?
Tarkista että kuva sisältää oikean headerin. Wikipedian mukaan JPG-kuvat alkavat aina tavuilla ff d8, joten jos nuo tavut löytyvät tiedostosta niin se on todennäköisesti JPEG-kuva.
Toinen vaihtoehto on tarkistaa, että headerit eivät ole suoritettavien tiedostojen yms. headereita.
Lisäys: Exejen headeri on 4d 5a. Skriptit alkavat usein merkeillä #! -joten niitä kannattaa myös varoa.
Miten headeri tarkistetaan?
Googletin jo, ja en löytänyt vastausta.
PHP-metodi fread lukee tiedostosta tietyn määrän tavuja.
Jos joku jaksaa piilottaa haittaohjelman .jpg-tiedostoon, headerin tarkistaminen tuskin muuttaa mitään. Haitallinen koodi ei tee mitään ennen kuin se ajetaan, joka edellyttää käytännössä tiedostopäätteen vaihtamista, executable-oikeuksia tai haavoittuvuutta ohjelmassa, joka kuvan näyttää.
Lähes varma tapa olisi koko tiedoston validointi, mutta en tiedä, onko siihen valmiita kirjastoja.
Lähtisin kuitenkin liikkeelle virheellisten tiedostojen analysoinnista ja suunnittelisin tarkistuksia vasta sitten.
-tossu- kirjoitti:
Lähes varma tapa olisi koko tiedoston validointi, mutta en tiedä, onko siihen valmiita kirjastoja.
On ainakin vanha kunnon ImageMagick ja identify-komento
Koska on komentoriviohjelma, niin siitä vaan system-funktiolla (vai-mikä-se-on-PHP:ssä). Pitää tietysti muistaa tarkistaa ettei tiedostonimi sisällä haittakoodia, johon PHP:ssa on varmaan valmis funktio.
Ai niin, onhan sille tietenkin myös läjä kirjastoja, myös PHP:lle.
Php.net tarjoaa näköjään tota opasta
Onko se oikeasti näin vaikeaa, tehdä kuvan-laataamis-ominaisuuden sisältävä sivu tietoturvavakaaksi?
--
Kertokaa nyt se varmin tapa, ja selkeästi :).
Mieluiten myös ette linkkaa englanninkielisiä oppaita (en ymmärrä niistä mitään).
Tarvitsen apua pikaisesti, sivusto on tämän takia tauolla.
Olisin kiitollinen myös jostain koodipätkästä, joka tutkii kuvan toimivuuden tms.
Jos puhutaan tietoturvasta, niin ei ole mitään huolta jos kohtelet tiedostoja kuvina. Jos ne eivät ole kuvia, tulee korkeintaan virheitä, ei mitään haitallista. Ei kuvankatseluohjelma tai nettiselain osaa etsiä kuvista koodia ja suorittaa sitä. Voit manuaalisesti poistaa kuvat, jotka eivät toimi. Jos niitä tulee niin paljon, että syntyy ongelma, tarkista headerit tai käytä jotain JaskaP:n mainitsemaa ohjelmaa tunnistamaan virheelliset kuvat.
Miten sitten Norton havaitsi sivula uhan? Pelkkää sattumaa?
Tyhjät kuvathan eivät haittaa, mutta jos niissä on minkäänlaista tietoturvariskiä, pitäisi ongelma korjata.
Ei paha koodi haittaa, jos sitä ei suoriteta. Nortinit yms. etsivät pahaa koodia kaikista tiedostoista, koska on mahdollista, että ne suoritetaan myöhemmin. Jos tätä ei kuitenkaan koskaan tapahdu (eikä sitä tapahdu jos koodaat PHP-ohjelmasi huolella), mitään vaaraa ei ole.
Muista, vaikka kirjoitan tähän <script>alert("Hahaa!"); doSomethingEvil();</script>
, ei se tarkoita, että mitään tapahtuu. Sama on kuvissa. Jos et niitä suorita, eivät ne tee mitään.
Poista ne kuvat nettisivultasi ja tee suodatin edellämainituilla tavoilla jos niitä tulee lisää.
Mitä tässä tapauksessa tarkoittaa "kuvan suorittaminen"?
Tarkoittaako se kuvan sivulle tulostamista, vai jollain ohjelmalla sen sisältämän koodin suorittamista? Vai mitä?
Jossain vaiheessahan selaimissa oli tunnettuja bugeja kuvankäsitelyssä, jolloin esim. sopivalla puskuriylivuodolla saattoi saada haittakoodia suoritettua.
Tällä hetkellä voisi ainakin toivoa ettei enää sellaisia selaimia olisi kellään käytössä.
JuustoPala kirjoitti:
Mitä tässä tapauksessa tarkoittaa "kuvan suorittaminen"?
Ei kuvan tulostamista ainakaan. Sen pitäisi olla nykypäivän ohjelmilla turvallista.
Kuvan suorittaminen tarkoittaa, että vihamielinen koodi etsitään toisella ohjelmalla (kuten tulkilla) kuvasta, ja suoritetaan.
JuustoPala kirjoitti:
Mitä tässä tapauksessa tarkoittaa "kuvan suorittaminen"?
Tällä tarkoitetaan kuvan suorittamista koodina. Tällaista on esimerkiksi kuvan ajaminen PHP-tulkin läpi include
-komennolla, jolloin kuvan mahdollisesti sisältämä haitallinen PHP-koodi suoritetaan. Toinen esimerkki on kuvan tallentaminen työpöydälle, nimeäminen .exe-päätteiseksi ja tuplaklikkaaminen.
Tiedostot voivat sisältää mitä tahansa haitallista koodia, mutta sillä ei ole mitään väliä, niin kauan kuin sitä ei suoriteta. Eivätkä tiedostot suorita itse itseään, ellet käske. Joitain erittäin harvinaisia poikkeutapauksia on olemassa, mistä Grez mainitsi, mutta niistä sinun on turha välittää.
Onneksi huolen aiheeni oli turha!
Kiitos!
Toisaalta, jos pyörität softaasi kaupallisessa pilvessä, jossa on tappiin asti viritetyt viruksentorjuntaohjelmistot yms. suojaukset, haitallinen kuva jää kiinni johonkin seulaan (esim. palomuuriin), eikä lataudu perille asti ollenkaan.
Grez kirjoitti:
Jossain vaiheessahan selaimissa oli tunnettuja bugeja kuvankäsitelyssä, jolloin esim. sopivalla puskuriylivuodolla saattoi saada haittakoodia suoritettua.
Josta tuli mieleen, että ImageMagick on C:llä tehty, joten puskurinylivuotohyökkäys on mahdollinen...
jukkah kirjoitti:
Toisaalta, jos pyörität softaasi kaupallisessa pilvessä, jossa on tappiin asti viritetyt viruksentorjuntaohjelmistot yms. suojaukset, haitallinen kuva jää kiinni johonkin seulaan (esim. palomuuriin), eikä lataudu perille asti ollenkaan.
Näköjään pääsevät kerran JuustoPala on ne huomannut, voivat toki olla pelkästään korruptoituneita, eikä siis haittakoodia. (JuustoPala voisi laittaa linkin vialliseen kuvatiedostoon, niin voisi ihmetellä.)
JuustoPala kirjoitti:
Onneksi huolen aiheeni oli turha!
Ehkä, mutta pitäisihän ne vialliset kuvat blokata tai jotain, eikös?
Mun mielestä se ei ole niin kovin kriittistä varmistua siitä, että ladattu tiedosto on oikeasti väitettyä muotoa, mikäli se ei itsessään aiheuta tietoturvariskiä eikä esimerkiksi järjestelmävirhettä.
P.S. Mikäli syötät kuvat selaimelle php:n kautta tai manipuloit niitä uploadaamisen yhteydessä, niin vika voi myös skriptissäsi. Tiedostojen lataaminen voi epäonnistua myös tiedostojen enimmäiskoon ylittymisen takia.
The Alchemist kirjoitti:
Mun mielestä se ei ole niin kovin kriittistä varmistua siitä, että ladattu tiedosto on oikeasti väitettyä muotoa, mikäli se ei itsessään aiheuta tietoturvariskiä eikä esimerkiksi järjestelmävirhettä.
Joo, mutta esimerkiksi selaimen oman "rikki"-kuvakkeen näyttäminen kuvan paikalla ei voi olla sivustolle eduksi. Tarttis varmaan jotain ööh... prosessoida.
Kuvanhan voi validoida muodollisesti vaikka getimagesize-funktiolla, kun tarkistaa, että se palauttaa kelvolliset mitat. Silloin kuva näkyy selaimessa ainakin jossain muodossa, vaikka voihan se edelleen olla osin korruptoitunut tai sisältää jotain ylimääräistäkin tavaraa kuten laukaisua odottavan viruksen.
http://nullcandy.com/php-image-upload-security-how-not-to-do-it/
laitan tämän vain tänne.
Aihe on jo aika vanha, joten et voi enää vastata siihen.