ugrás a tartalomhoz

Php fájletöltési probléma.

izeke06 · 2011. Szep. 29. (Cs), 09.22
Sziasztok!

Van egy ilyen kódom:

header('content-type:application/force-download');
header('content-disposition:attachment;filename="'.$_GET['mit'].'"');
readfile("csatol/".$_GET['mit']);

A begetelt mit az pl így néz ki: valami.jpg
A letöltendő fájl bármi lehet.
A fájlok az index.php meletti csatol könyvtárban vannak.
A letöltés megindul le is tölti a fájlt azon a néven, de a fájl tartalma doc esetén az oldal tartalma.

Van .htacces-em:
Ez van benne:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule ^(.*)$ index.php?termek=$1 [QSA,L]

Válaszokat köszönöm.
 
1

Ez nekem valamilyen elnyelt

prom3theus · 2011. Szep. 30. (P), 15.12
Ez nekem valamilyen elnyelt hibának tűnik. A .htaccess-hez próbáld hozzáadni ezeket a sorokat is:
php_value display_errors On
php_value html_errors On
#Minden hibajelzés
php_value error_reporting 8191

php_value magic_quotes_gpc 0
php_value magic_quotes_runtime 0
php_value register_globals 0
php_value session.auto_start 0


Az első 4 sor a hibaüzenetek kimenetre jutásáért fontos, az utolsó 4 pedig biztonsági okokból: a megic_quotes okozhat problémát az elmebetegebb fájlneveknél, a register_globals csak a biztonság kedvéért legyen kizárva, a session automatikus indítása pedig belebarmolhat a readfile() kimenetébe egy warninggal esetleg, bár erre így mérget most nem vennék.

Ami még tanácsos lehet: readfile előtt ob_clean() és flush() hívása, meg talán egy "Content-Size" header-t is adnék a többi meglévő után hogy a böngésző (meg a felhasználó) is tudja, mekkora a letöltésre jelölt fájl.

Látatlanban több ötletem nincs. Ha megvan a htaccess módosítás, csinálj egy letöltést, szerintem egy E_NOTICE vagy E_WARNING szintű hibaüzenet sanszos a letöltött fájlban.
2

Biztonság

Poetro · 2011. Szep. 30. (P), 17.24
Ne feledkezz meg a biztonságról sem. Ugyanis így le lehet töltni a szerverről akármelyik fájlt. Ha például azt adom meg a mit-nek megadom azt, hogy index.php, akkor letölti az index.php forrását.

Valamint jó lenne a fájl nevét mime kódolni kellene, ha tartalmaz nem ASCII karaktereket illetve nem nyomtatható karaktereket.
3

Egészpontosan ha

prom3theus · 2011. Okt. 2. (V), 14.48
Egészpontosan ha "../index.php"-t ad meg :) de egyébként igen. Egy basename függvény valszleg orvosolná ezt a gondot a GET-nél, nem jutna ki a fájl sehogy sem a csatol mappából. A MIME pedig valóban kell (urlencode), elég csak egy szóköz vagy ékezetes név a fájlok közt és máris baj van jó eséllyel.