Kirjoittaja Aihe: pdf:t kuvat jne... tietokantaan ja pois  (Luettu 1711 kertaa)

samja

  • Käyttäjä
  • Viestejä: 182
    • Profiili
pdf:t kuvat jne... tietokantaan ja pois
« : 14.04.09 - klo:03.48 »
Minulla on seuraava php-koodinpätkä, jolla noudan tietokannasta erityyppisiä tiedostoja.

Koodia: [Valitse]
  $rec = getRec('arkisto', '*', "WHERE id=$_GET[id]")); # Hakee tietueen tietokannasta
  header("Content-type: $rec[type]");
  header("Content-disposition: attachment; filename=\"$rec[name]\"");
  echo $rec['data'];
  exit(0);

Kyseinen koodi toimii hyvin palvelimellani, joka on kotikoneessa. Kun haen palvelua, pyytää selain vaihtoehtoja, jossa voi tallentaa tiedoston kovalevylle tai katsella sitä.

Kun palvelin on se virallisempi, ei asia enää toimikkaan. Kuvat eikä pdf:t näy. Tiedostokoko vaihtelee latauspaikan mukaan.

Missä ongelma?
Yleisfoorumi:  http://ajatusmylly.net

peran

  • Vieras
Vs: pdf:t kuvat jne... tietokantaan ja pois
« Vastaus #1 : 14.04.09 - klo:05.02 »
Minulla on seuraava php-koodinpätkä, jolla noudan tietokannasta erityyppisiä tiedostoja.

Koodia: [Valitse]
  $rec = getRec('arkisto', '*', "WHERE id=$_GET[id]")); # Hakee tietueen tietokannasta
  header("Content-type: $rec[type]");
  header("Content-disposition: attachment; filename=\"$rec[name]\"");
  echo $rec['data'];
  exit(0);

Kyseinen koodi toimii hyvin palvelimellani, joka on kotikoneessa. Kun haen palvelua, pyytää selain vaihtoehtoja, jossa voi tallentaa tiedoston kovalevylle tai katsella sitä.

Kun palvelin on se virallisempi, ei asia enää toimikkaan. Kuvat eikä pdf:t näy. Tiedostokoko vaihtelee latauspaikan mukaan.

Missä ongelma?

Vahvasti epäilen, ettei seuraava lause toimi halutulla tavalla palvelimellasi. Lisäksi todennäköisesti SQL-injektio olisi mahdollinen, jos se toimisi, mikäli et ole suojannut sitä tässä näkymättömällä tavalla.
Koodia: [Valitse]
  $rec = getRec('arkisto', '*', "WHERE id=$_GET[id]")); # Hakee tietueen tietokannasta

Mä siis kirjoittaisin seuraavan seuraavalla tavalla. Tosin SQL-injektion mahdollisuutta en ole tässä poistanut. Tossa on ylimääräinen )-merkkikin.
Koodia: [Valitse]
  $rec = getRec('arkisto', '*', "WHERE id=".$_GET['id']); # Hakee tietueen tietokannasta
  header("Content-type: ".$rec['type']);
  header("Content-disposition: attachment; filename=\"".$rec['name']."\"");
  echo $rec['data'];
  exit(0);

Tarvitseeko koodisi tota exit(0)-aa?

Saattaa olla myös muitakin virheitä, joita ei tässä käy selväksi.

Kannattaa tulostaa esikatseluksi virheen etsimiseksi, millainen SQL-haulla haet kannasta.

Lisäksi. Mitä nykyinen php-koodisi tekee?
Virheilmoitusflagit ylös, ja katso tuleeko virheitä.

Edit - näyttää ainakin kapsissa toimivan toi sunkin koodisi, mutta en ole varma php4:lla toimivuudesta. Ja tosiaan poista toi injektion mahdollisuus, kun kuitenkin pyörii internetissä, niin ei voi olla varma ketä sivustoille eksyy.
« Viimeksi muokattu: 14.04.09 - klo:05.14 kirjoittanut peran »

samja

  • Käyttäjä
  • Viestejä: 182
    • Profiili
Vs: pdf:t kuvat jne... tietokantaan ja pois
« Vastaus #2 : 14.04.09 - klo:11.37 »
Laitoin virheilmoitukset päälle. Vaikka koodissa oli ylimääräinen )-merkki, ei siinä ole havaittavia bugeja. Ylimääräinen merkki tuli tänne kopsatessa. Jo kääntäjä ei hyväksy tuollaisia typoja.

Palvelu on vielä niin tuore ja testauksessa, että en ole ottanut huomioon injektion mahdollisuutta. Se kyllä pitää huomioida jatkossa.

Exit(0):aa tarvitaan, koska koodi ajetaan index.php:stä ja exit helpottaa koodin asua. Kokeilin ilman exit:iä, eikä muuttanut virhettä.

sql-hakulause on ok, koska tietue on oikea. Näen sen sisällön(ilman data-kenttää) muuten, joka ei tule koodissa ilmi.

Lisäksi. Mitä nykyinen php-koodisi tekee?

Koodi yksinkertaisesti tulostaa headerit ja sisällön.


Jotain ongelmasta kertoo se, kun haen tietokannasta gif-kuvan. Kun haen saman kuvan kotikoneen palvelimelta, on sen koko 56586 ja kun kuva tulee vieraalta palvelimelta on koko 54917. Pitänee ehkä vertailla sisältöä.

Voiko vieraalla palvelimella olla eri asetuksia, jotka vaikuttavat?

Php-version: 5.2.0-8+etch7 (etäpalvelin)
Php-version: 5.2.6-2ubuntu4.1 (kotikoneen palvelin)
Yleisfoorumi:  http://ajatusmylly.net

samja

  • Käyttäjä
  • Viestejä: 182
    • Profiili
Vs: pdf:t kuvat jne... tietokantaan ja pois
« Vastaus #3 : 14.04.09 - klo:12.01 »
Lisätietoa. Kun latasin css-tyylitiedoston palvelimelta, kaikki meni hyvin.

Lisätty:

Koodia: [Valitse]
ls -l *.png
-r-------- 1 juha juha 190 2009-04-14 12:15 1.png
-r-------- 1 juha juha 189 2009-04-14 12:14 2.png
juha@musta:/tmp$ od -x 1.png
0000000 5089 474e 0a0d 0a1a 0000 0d00 4849 5244
0000020 0000 0a00 0000 0a00 0608 0000 8d00 cf32
0000040 00bd 0000 7301 4752 0042 ceae e91c 0000
0000060 0600 4b62 4447 8900 c900 7a00 1b6b 715c
0000100 0000 0900 4870 7359 0000 130b 0000 130b
0000120 0001 9c9a 0018 0000 7407 4d49 0745 04d9
0000140 0d06 3807 9546 51a3 0000 1900 4574 7458
0000160 6f43 6d6d 6e65 0074 7243 6165 6574 2064
0000200 6977 6874 4720 4d49 5750 0e81 0017 0000
0000220 4919 4144 1854 63d3 f77c d5ff 067f 0022
0000240 0313 6091 2154 1475 0002 0e2d ea03 e061
0000260 2a09 0000 0000 4549 444e 42ae 8260
0000276
juha@musta:/tmp$ od -x 2.png
0000000 503f 474e 0a0d 0a1a 0000 0d00 4849 5244
0000020 0000 0a00 0000 0a00 0608 0000 3f00 3f32
0000040 0000 0100 5273 4247 3f00 1c3f 003f 0000
0000060 6206 474b 0044 003f 003f 6b7a 5c1b 0071
0000100 0000 7009 5948 0073 0b00 0013 0b00 0113
0000120 3f00 183f 0000 0700 4974 454d 3f07 0604
0000140 070d 4638 3f3f 0051 0000 7419 5845 4374
0000160 6d6f 656d 746e 4300 6572 7461 6465 7720
0000200 7469 2068 4947 504d 3f57 170e 0000 1900
0000220 4449 5441 3f18 7c63 3f3f 7f3f 2206 1300
0000240 3f03 5460 7521 0214 2d00 030e 613f 093f
0000260 002a 0000 4900 4e45 3f44 6042 003f
0000275

Ensimmäinen lataus kotikoneelta ja toinen kauempaa. Tiedostojen sisällöt vaihtelevat.
« Viimeksi muokattu: 14.04.09 - klo:12.28 kirjoittanut samja »
Yleisfoorumi:  http://ajatusmylly.net

samja

  • Käyttäjä
  • Viestejä: 182
    • Profiili
Vs: pdf:t kuvat jne... tietokantaan ja pois
« Vastaus #4 : 14.04.09 - klo:19.12 »

Ongelma ratkesi. Olin valinnut merkistöksi utf8:n ja kun binääritiedostot syötettiin kantaan, ne menivät kai jotenkin vinksalleen.
Yleisfoorumi:  http://ajatusmylly.net