Poistan kuvan palvelimelta tällä tavalla, Intran kautta.
Kuinka paljon tämä aiheuttaa riski / vaaratilanteita
delete_img(); // POISTA KUVA function delete_img() { $myFile = $_GET['img_name']; if(empty($myFile)) { return; } unlink("tiedostot/$myFile"); }
Voisitteko antaa hieman tietoturvaan nähden parannuksia.
---
Tällä tavalla taas listaan tiedostot palvelimelta, olisiko tähän antaa tietoturvaan / toteutukseen nähden lisäinfoa. En halua, että jokainen pääsee näiden avulla sorkkimaan koko palvelintilaani :
public function t_list_file() { $dir = "tiedostot"; print '<center><table celpadding=0 cellspacing=0 class="table">'; $hakemisto = opendir("$dir/"); $nimi = readdir($hakemisto); while ($nimi) { if($nimi == '.' || $nimi == '..') { } else { print '<tr>'; print '<td><a href="./tiedostot/'.$nimi.'">'. $nimi .'</a></td>'; print '<td><a href="./delete_img.php?img_name='.$nimi.'"> [ poista ]</a></td></tr>'; } $nimi = readdir($hakemisto); } closedir($hakemisto); print '</table></center>'; }
Tarkista tiedoston polku, tarkista tiedoston pääte.
Miten olisi mahdollista, tehdä myös hakuominaisuus joka etsii tiedostot joka sisältää hakuehdon antaman merkkijonon.
Laittamalla tiedostoista tarvittavat tiedot tietokantaan. Auttaa samalla tietoturvaan myös alkuperäiseen ongelmaasi, kun poistotoiminnon voi tehdä yksilöivällä id-numerolla.
Sitä arvelinkin, mutta toivoin oikotietä onneen ;)
Tässä tapauksessa tietenkin tietoturvan yms. huomioon ottamisen kannalta, ei tietenkään kannata alkaa oikomaan polkuja vaan lähteä toteuttamaan homma oikein ja kunnolla, kun kerran kanta pyörii taustalla muiden asioiden takia.
Kun kerran tietokanta on, kaikkein turvallisinta ja lopulta jopa helpointa on tallentaa tietokantaan kaikki tarvittavat kuvien tiedot ja tallentaa itse kuvatiedostot uusilla nimillä id:n mukaan (1.jpg, 2.jpg). Näin ratkeavat kaikki tiedostonimiin liittyvät tietoturvaongelmat, kun tiedoston alkuperäinen nimi on vain merkkijonona tietokannassa ja kaikissa muissa vaiheissa – tallennus, katselu, poisto – voidaan käyttää yksinkertaista ja turvallista tiedostonimeä. Joissain tilanteissa jopa itse tiedoston voisi laittaa tietokantaan vaikkapa MEDIUMBLOB-tyyppisenä kenttänä, mutta tästä toki aiheutuu turhaa kuormaa tietokantaan ja skripteille, kun kuvien katselukin pitää kierrättää PHP:n ja SQL:n kautta.
manninen kirjoitti:
$myFile = $_GET['img_name']; // ... unlink("tiedostot/$myFile");
Ja esimerkkinä tuollaisen toteutuksen mahdollisista ongelmista: anna parametriksi ../sopiva.php ja hupsista, on koodia kateissa (olettaen että prosessilla on oikeudet tuhota niitä, ei toki saisi olla, mutta...). Eli voi päästä mihin tahansa tiedostoon käsiksi kun mitenkään ei tarkisteta, että pysytään tiedostot-hakemiston alapuolella.
Kiitoksia kattavista ja opettavista neuvoista, näitä on ilo lukea.
Aihe on jo aika vanha, joten et voi enää vastata siihen.