Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: PHP injektio $_FILES

carter [22.06.2009 18:06:58]

#

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 :)

Tumettaja [22.06.2009 18:13:35]

#

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.)

Metabolix [22.06.2009 18:28:59]

#

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'");

carter [22.06.2009 18:47:47]

#

Jep, olen käsittänyt väärin. Kiitos vastauksesta :)

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta