Eli kun on tuollainen $_FILES globaali muuttuja, niin kysyisin miten onnistuisi estää syntyvä php injectio, jos tiedoston nimessä onkin ", ', {} tai muita vaarallisia merkkejä.
$_POST kohdalla ilmeisesti toimii käyttämällä mysql_real_escape_string funktiota, mutta en keksinyt miten saisi tuon $_FILES suojattua.
Toivottavasti saitte selvää kysymyksestä.
Kiitos vastauksesta :)
Onnistuu varmaankin käymällä $_FILES taulukon läpi silmukassa?
<?php $kentat = array("tiedosto1","tiedosto2"); for ($i = 0; $i < count($kentat); $i++) { $_FILES[$kentat[$i]]['name'] = mysql_real_escape_string($_FILES[$kentat[$i]]['name']); }
Toimivuudesta en mene takuuseen :)
(Mod. huom: PHP-koodi vaatii <?php-tagin.)
Nyt taidat olla jostain sekaisin. Eihän PHP:hen mitään injektiota liity vaan SQL:ään, ja on aivan väärä ratkaisu ajaa koko POST-taulukko escape-funktion läpi, kun oikeasti käsittelyä tarvitsevat vain arvot, jotka laitetaan tietokantaan. PHP-koodin siis kuuluisi käsitellä tekstejä niin, että erikoismerkitkin ovat joukossa sellaisenaan, ja tarvittavat muunnokset tietokantaa tai tulostusta varten kuuluisi tehdä vasta, kun tietoja siirretään PHP:ltä eteenpäin. Sillä ei ole merkitystä, mistä data on peräisin.
<?php $arvo = $_POST["x"]; // tai $_FILES... tai mitä tahansa // Tulostus ja htmlspecialchars echo htmlspecialchars($arvo); // MySQL ja mysql_real_escape_string $mysql_arvo = mysql_real_escape_string($arvo); mysql_query("DELETE FROM taulu WHERE arvo = '$mysql_arvo'");
Jep, olen käsittänyt väärin. Kiitos vastauksesta :)
Aihe on jo aika vanha, joten et voi enää vastata siihen.