[PHP]Weigerende download

Pagina: 1
Acties:
  • 151 views sinds 30-01-2008
  • Reageer

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Depress
  • Registratie: Mei 2005
  • Laatst online: 18-09 22:29
Hoi,

Ik heb een download script gemaakt. Dit werkt, behalve bij enkele bestanden.(willekeurig).
Voorbeelden van niet werkende bestanden met extensie wmv:
pr0n hoeven we hier niet, en voor 16+ filmpjes hebben we de HK

Voorbeelden die wel werken:
pr0n hoeven we hier niet, en voor 16+ filmpjes hebben we de HK

Nu snap ik niet wat fout gaat. In de database hebben ze het zelfde type. Maar toch werkt de ene niet en de andere wel.

Dit heb ik als code:
PHP:
1
2
3
4
5
header('Content-type: '.$info['type']); 
header('content-length: '.$size.''); 
header('content-disposition: attachment; filename='.$_GET['file'].''); 
$fp = fopen($file, 'r');
fpassthru($fp);


Hier bij is $info['type'] het mime content type.

Wat gaat hier fout?
Ik heb verschillende namen geprobeerd, maar dit heeft geen verschil.

Een force download geeft het zelfde probleem.

[ Voor 20% gewijzigd door NMe op 07-06-2006 21:04 ]


Acties:
  • 0 Henk 'm!

  • frickY
  • Registratie: Juli 2001
  • Laatst online: 18-09 14:42
Er is echt hééél veel te vinden over t downloaden van bestanden via PHP. En aan je code te zien, heb je er nog maar weinig van geprobeerd. Nog genoeg met Google te vinden dus ;)
Kijk bijv eens in de user-notes op http://www.php.net/header en indien van toepassing http://www.php.net/session_write_close

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Linkjes weggemoffeld. Er zijn ook mensen die vanuit hun werk GoT-en, die zitten echt niet op blote borsten te wachten als hun baas achter ze staat.

Verder denk ik niet dat we je echt kunnen helpen als je niet de daadwerkelijke waarden van $info['type'] en $size noemt.

offtopic:
Die toevoeging van een lege string aan het einde op regel 2 en 3 slaat ook nergens op. ;)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • Depress
  • Registratie: Mei 2005
  • Laatst online: 18-09 22:29
$info['type'] -> video/x-ms-wmv
$size -> grote van bestand in bytes.

@ eerste reply, ik heb wel degelijk geprobeerd. dat stukje code is mooi opgeruimd. En dat werkt gewoon.

@lege string: Komt door het proberen...

Maar die maakt het verschil niet.

Acties:
  • 0 Henk 'm!

  • orf
  • Registratie: Augustus 2005
  • Nu online

orf

Wat gebeurt er als het fout gaat?

Acties:
  • 0 Henk 'm!

  • Depress
  • Registratie: Mei 2005
  • Laatst online: 18-09 22:29
Dan krijg ik een 404 error

Acties:
  • 0 Henk 'm!

  • Shadowman
  • Registratie: Januari 2002
  • Niet online
Zijn de bestanden die niet te downloaden zijn groter dan de bestanden die wel te downloaden zijn?

Acties:
  • 0 Henk 'm!

Verwijderd

Aantal tips:

1. Zet de max execution time hoger dan standaard of zet hem op 0 (uit).
2. Probeer eens gebruik te maken van readfile(); http://nl3.php.net/readfile
3. Indien dat niet werkt probeer de header content-type eens statisch naar force download te zetten.
4. Als de server op linux draait let er dan op dat bestandsnamen en mapnamen hoofdletter gevoelig zijn

Acties:
  • 0 Henk 'm!

  • Depress
  • Registratie: Mei 2005
  • Laatst online: 18-09 22:29
Shadowman schreef op woensdag 07 juni 2006 @ 23:28:
Zijn de bestanden die niet te downloaden zijn groter dan de bestanden die wel te downloaden zijn?
Ja, die wat wel werkt is 2.5, de andere zijn 5.x en 7.x
Wat bedoel je dan hier mee?

PS Heb volledige controle over server, dus php.ini changes kunnen eventueel gemaakt worden.
Verwijderd schreef op donderdag 08 juni 2006 @ 08:38:
Aantal tips:

1. Zet de max execution time hoger dan standaard of zet hem op 0 (uit).
2. Probeer eens gebruik te maken van readfile(); http://nl3.php.net/readfile
3. Indien dat niet werkt probeer de header content-type eens statisch naar force download te zetten.
4. Als de server op linux draait let er dan op dat bestandsnamen en mapnamen hoofdletter gevoelig zijn
1: Die staat op 1 uur
2: Heb ik ook geprobeerd, maakt geen verschil.
3: Statisch forcedownload of appliaction/octet-stream geeft ook zelfde
4: Er wordt op bestaan gecontroleerd. Dus dan kan ook niet.

Acties:
  • 0 Henk 'm!

  • Depress
  • Registratie: Mei 2005
  • Laatst online: 18-09 22:29
Schopje...

Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 02:21

Janoz

Moderator Devschuur®

!litemod

Aangezien grotere bestanden niet werken vermoed ik dat je aan je max geheugen zit. Je huidige implementatie (afhankelijk van de werking van fpassthru) leest het complete bestand in en stuurt het vervolgens naar de client.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • Cuball
  • Registratie: Mei 2002
  • Laatst online: 07-09 09:59
Depress schreef op woensdag 07 juni 2006 @ 20:42:
pr0n hoeven we hier niet, en voor 16+ filmpjes hebben we de HK
offtopic:
HK waarvoor staat die afkorting ?

"Live as if you were to die tomorrow. Learn as if you were to live forever"


Acties:
  • 0 Henk 'm!

  • BtM909
  • Registratie: Juni 2000
  • Niet online

BtM909

Watch out Guys...

Ace of Base vs Charli XCX - All That She Boom Claps (RMT) | Clean Bandit vs Galantis - I'd Rather Be You (RMT)
You've moved up on my notch-list. You have 1 notch
I have a black belt in Kung Flu.


Acties:
  • 0 Henk 'm!

  • Depress
  • Registratie: Mei 2005
  • Laatst online: 18-09 22:29
Janoz schreef op vrijdag 09 juni 2006 @ 11:36:
Aangezien grotere bestanden niet werken vermoed ik dat je aan je max geheugen zit. Je huidige implementatie (afhankelijk van de werking van fpassthru) leest het complete bestand in en stuurt het vervolgens naar de client.
Dus als ik ut geheugen hoger zet zou het moeten werken?

Edit:
Het staat nu op 8M het max memory gebruik. Terwijl de files minder als 8 mb zijn...

[ Voor 11% gewijzigd door Depress op 09-06-2006 12:26 ]


Acties:
  • 0 Henk 'm!

  • moozzuzz
  • Registratie: Januari 2005
  • Niet online
het lijkt me interessanter als je je bestanden stuk per stukje inleest en doorstuurt en zo loopt.

dus per x000 bytes doorsturen en dan de volgende x000 bytes inlezen en versturen en dan en dan en dan...

Acties:
  • 0 Henk 'm!

  • Depress
  • Registratie: Mei 2005
  • Laatst online: 18-09 22:29
Hoe wil je dat waarmaken?

Met header(Range: x,x); mischien. Maar dit is geen optie. Ik wil één keer de melding van het te downloaden bestand. Niet meerdere keren.

Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 02:21

Janoz

Moderator Devschuur®

!litemod

Lees nog even goed wat moozzuzz zegt. Hij heeft het niet over headers en wat dan ook. Hij heeft het over het doorsturen via een kleine buffer. Laad een blokje in van het bestand en stuur dit vervolgens naar de client. Herhaal dat totdat het hele bestand verstuurd is.
Het staat nu op 8M het max memory gebruik. Terwijl de files minder als 8 mb zijn...
Php gebruikt natuurlijk wel ietsje meer geheugen dan enkel het bestand wat je aan het doorsturen bent. Probeer eens een zo groot mogelijk bestand te pakken dat nog wel werkt en verlaag vervolgens je geheugengebruik. Als het dan niet meer werkt weet je waar het aan ligt.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • Depress
  • Registratie: Mei 2005
  • Laatst online: 18-09 22:29
@Jonaz: Ik ga het geheugen stukje eens proberen.

Maar hoe kun je dat dan gaan realiseren, een buffer opbouwen?

Ik heb beetje ervaring met buffers in delphi, meer streamen zeg maar.

Hoe moet ik dat aanpakken?

Acties:
  • 0 Henk 'm!

  • Spider.007
  • Registratie: December 2000
  • Niet online

Spider.007

* Tetragrammaton

Bijna rechtstreeks gekopieert vanaf http://nl2.php.net/manual/en/function.fread.php ;)
PHP:
1
2
3
4
5
6
7
<?php
$handle = fopen("/filename", "rb");
while (!feof($handle)) {
  echo fread($handle, 8192);
}
fclose($handle);
?> 

---
Prozium - The great nepenthe. Opiate of our masses. Glue of our great society. Salve and salvation, it has delivered us from pathos, from sorrow, the deepest chasms of melancholy and hate


Acties:
  • 0 Henk 'm!

  • Depress
  • Registratie: Mei 2005
  • Laatst online: 18-09 22:29
Ik ga er eens mee knommelen, bedankt voor de tip.


Maar dan blijft nog steeds het zelfde probleem.

Er wordt gezegt dat ut memory te laag is, maar dan verwacht je toch een error van pph? Geen 404...

Zijn er nog mensen die hier iets over weten?


EDIT: Zojuis het memory op 100M gezet. Dit heeft geen zin, het blijft steeds die 404...

EDIT2:

Dit heb ik geprobeerd:
PHP:
1
2
3
4
5
6
7
8
9
header('Content-type: '.$info['type']);
header('content-length: '.$size); 
header('content-disposition: attachment; filename='.$_GET['file'].''); 

$handle = fopen("uploads/".$_GET['file'], "rb"); 
while (!feof($handle)) { 
echo fread($handle, 8192); 
} 
fclose($handle);


Blijft 404 geven.

[ Voor 59% gewijzigd door Depress op 10-06-2006 13:38 ]


Acties:
  • 0 Henk 'm!

  • spone
  • Registratie: Mei 2002
  • Niet online
-NMe- schreef op woensdag 07 juni 2006 @ 21:08:
Linkjes weggemoffeld. Er zijn ook mensen die vanuit hun werk GoT-en, die zitten echt niet op blote borsten te wachten als hun baas achter ze staat.
Denk ook niet echt dat die baas erop zit te wachten dat ze zitten te GoT'ten als ze moeten werken ;)

i5-14600K | 32GB DDR5-6000 | RTX 5070 - MacBook Pro M1 Pro 14" 16/512


Acties:
  • 0 Henk 'm!

  • Shadowman
  • Registratie: Januari 2002
  • Niet online
Ik kan eerlijk gezegd geen linkje vinden waar iets wordt gemeld over dat apache te grote files zou weigeren, maar ik vermoed dat dat er wel is. IIG, ik denk niet dat het aan php ligt, simpelweg omdat php een error geeft als een functie failed, en je dus geen 404 zal krijgen.

Ik hoef overigens toch niets te zeggen over de veiligheid van dat script? (wat if $_GET['file'] iets als ../../../../etc/passwd is? ;))

Acties:
  • 0 Henk 'm!

  • Spider.007
  • Registratie: December 2000
  • Niet online

Spider.007

* Tetragrammaton

Het is inderdaad niet logisch dat je een 404 krijgt; daar had ik even overheen gelezen in je topicstart. Anyways; als je browser zegt dat het een 404 is; betekent dat niet altijd dat dat het ook echt is :) Jouw site geeft momenteel een zgn. zero-sized-reply en geen 404. Kijk eens in je Apache error_log; in je en php error_log en vertel ons eens wat erin staat. Ik denk zelf dat de file gewoon niet bestaat namelijk; ivm hoofdletters oid. Waar komt je $size trouwens vandaan, en $info?

---
Prozium - The great nepenthe. Opiate of our masses. Glue of our great society. Salve and salvation, it has delivered us from pathos, from sorrow, the deepest chasms of melancholy and hate


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

spone schreef op zaterdag 10 juni 2006 @ 15:34:
Denk ook niet echt dat die baas erop zit te wachten dat ze zitten te GoT'ten als ze moeten werken ;)
offtopic:
Ik ken mensen waarvan daadwerkelijk verwacht wordt dat ze minimaal een uurtje per week op dit soort sites rondhangen om zo hun kennis te vergroten. Dus...ja. ;)
Shadowman schreef op zaterdag 10 juni 2006 @ 18:54:
Ik hoef overigens toch niets te zeggen over de veiligheid van dat script? (wat if $_GET['file'] iets als ../../../../etc/passwd is? ;))
/etc/shadow lijkt me interessanter, maar goed, als je die uit kan lezen in PHP is er nog wel wat meer mis met de beveiliging. :P

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • TRON
  • Registratie: September 2001
  • Laatst online: 16-09 13:13
True -NMe-, maar Shadowman heeft wel een goed punt natuurlijk :) Vraag bijvoorbeeld config.inc.php op en je kan het bestand uitlezen.

Leren door te strijden? Dat doe je op CTFSpel.nl. Vraag een gratis proefpakket aan t.w.v. EUR 50 (excl. BTW)


Acties:
  • 0 Henk 'm!

  • Depress
  • Registratie: Mei 2005
  • Laatst online: 18-09 22:29
Lieve mensen, dat heb ik natuurlijk beveiligedm je kunt geen ''/' od de ansie variant deaarvan in de file vartiable gebruiken:)

Waar vind ik die error log van php en apache?

Gevonden:
quote: Logs
3: [client 80.126.123.180] PHP Warning: fread(): supplied argument is not a valid stream resource in /chroot/home/uploadin/uploading.nl/html/modules/main.inc.php on line 578, referer: ***
4: [client 80.126.123.180] PHP Warning: feof(): supplied argument is not a valid stream resource in /chroot/home/uploadin/uploading.nl/html/modules/main.inc.php on line 577, referer: ***

[ Voor 77% gewijzigd door Depress op 10-06-2006 22:04 . Reden: Linkjes mask ]


Acties:
  • 0 Henk 'm!

  • Spider.007
  • Registratie: December 2000
  • Niet online

Spider.007

* Tetragrammaton

Depress schreef op zaterdag 10 juni 2006 @ 22:01:
Lieve mensen, dat heb ik natuurlijk beveiligedm je kunt geen ''/' od de ansie variant deaarvan in de file vartiable gebruiken:)
Controleer dat even; ik zit nu namelijk naar je /etc/passwd file te kijken ;)
Waar vind ik die error log van php en apache?

Gevonden:

[...]
Daaruit blijkt dat de file inderdaad niet gevonden wordt; hoe weet jij dat hij wel zou moeten bestaan en kun je dat controleren?

---
Prozium - The great nepenthe. Opiate of our masses. Glue of our great society. Salve and salvation, it has delivered us from pathos, from sorrow, the deepest chasms of melancholy and hate


Acties:
  • 0 Henk 'm!

  • Depress
  • Registratie: Mei 2005
  • Laatst online: 18-09 22:29
Oh, ik ga meteen even editten dan;) Dacht het beveiligd te hebben...

Ik kijk met file exists of die wel bestaat. En die geeft gewoon Treu terug.

@Spider hierboven, hoe krijg je dat dan klaar, ik krijg geen bestand, alleen het bestand wat ik aangeklikt heb...

Die breach is fixed now :p

[ Voor 35% gewijzigd door Depress op 11-06-2006 11:01 ]


Acties:
  • 0 Henk 'm!

  • Spider.007
  • Registratie: December 2000
  • Niet online

Spider.007

* Tetragrammaton

Depress schreef op zondag 11 juni 2006 @ 10:34:
Oh, ik ga meteen even editten dan;) Dacht het beveiligd te hebben...

Ik kijk met file exists of die wel bestaat. En die geeft gewoon Treu terug.
Laat dan eens wat meer van je script zien; kan het wellicht zijn dat de rechten op de file niet goed zijn? Er moet toch een reden zijn dat fopen de file niet geopend krijgt :)
@Spider hierboven, hoe krijg je dat dan klaar, ik krijg geen bestand, alleen het bestand wat ik aangeklikt heb...
gewoon ../../../../../../etc/passwd als URL meegeven; vervolgens 15 seconden wachten en dan op download klikken. Wellicht is er wat meer magic voor nodig omdat je browser de filename niet echt leuk vindt (jij stuurt namelijk weer ../../../../../../etc/passwd terug als filename) maar je krijgt de file toch echt terug geserveert :)

Tip: gebruik inplaats van $_GET['file'] een tussenvariabele die je wel controleert. Dus zoiets:
PHP:
1
2
3
4
5
if (strpos('/', $_GET['file']) === FALSE){
    $file = $_GET['file'];
}else{
    die('foutje, bedankt');
}

---
Prozium - The great nepenthe. Opiate of our masses. Glue of our great society. Salve and salvation, it has delivered us from pathos, from sorrow, the deepest chasms of melancholy and hate


Acties:
  • 0 Henk 'm!

  • Depress
  • Registratie: Mei 2005
  • Laatst online: 18-09 22:29
Het is al gefixed inmiddels:)

Maar mijn eerste probleem, van het no output probleem is er nog.

Acties:
  • 0 Henk 'm!

  • Spider.007
  • Registratie: December 2000
  • Niet online

Spider.007

* Tetragrammaton

Depress schreef op zondag 11 juni 2006 @ 11:07:
Het is al gefixed inmiddels:)

Maar mijn eerste probleem, van het no output probleem is er nog.
Reageer dan gerust even op het eerste gedeelte van mijn post; deze was al gericht op jouw initieele probleem
Spider.007 schreef op zondag 11 juni 2006 @ 11:05:
[...]
Laat dan eens wat meer van je script zien; kan het wellicht zijn dat de rechten op de file niet goed zijn? Er moet toch een reden zijn dat fopen de file niet geopend krijgt :)

---
Prozium - The great nepenthe. Opiate of our masses. Glue of our great society. Salve and salvation, it has delivered us from pathos, from sorrow, the deepest chasms of melancholy and hate


Acties:
  • 0 Henk 'm!

  • Depress
  • Registratie: Mei 2005
  • Laatst online: 18-09 22:29
Er valt niet veel te laten zien:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
$sql = 'SELECT * FROM files WHERE filename="'.$this->injectie($_GET['file']).'"';
$query = mysql_query($sql);
$info = mysql_fetch_assoc($query);

$size = filesize('uploads/'.$_GET['file']);
$file = 'uploads/'.$_GET['file'];
            
if (!file_exists($file)) die('Bestaat niet!');
                        
header('Content-type: '.$info['type']);
header('content-length: '.$size); 
header('content-disposition: attachment; filename='.$_GET['file'].''); 

$handle = fopen("uploads/".$_GET['file'], "rb"); 
while (!feof($handle)) { 
    echo fread($handle, 8192); 
} 
fclose($handle);


Thit is all, en werkt bij alle files behalve bij 2 .wmv bestanden.

[ Voor 26% gewijzigd door Depress op 11-06-2006 11:23 ]


Acties:
  • 0 Henk 'm!

  • WormLord
  • Registratie: September 2003
  • Laatst online: 10:10

WormLord

Devver

De log-errors die je hebt gepost geven aan dat de fopen fout is gegaan.
Ik zou verwachten dat daarvan ook een error in de log zit en die is veel interesanter.

Je zou voor de gein ook een test-pagina kunnen maken die het bestand niet verstuurd, maar wat output geeft (php-errors, debug-teksten, etc.).
Depress schreef op zaterdag 10 juni 2006 @ 22:01:
Lieve mensen, dat heb ik natuurlijk beveiligedm je kunt geen ''/' od de ansie variant deaarvan in de file vartiable gebruiken:)

Waar vind ik die error log van php en apache?

Gevonden:

3: [client 80.126.123.180] PHP Warning: fread(): supplied argument is not a valid stream resource in /chroot/home/uploadin/uploading.nl/html/modules/main.inc.php on line 578, referer: ***
4: [client 80.126.123.180] PHP Warning: feof(): supplied argument is not a valid stream resource in /chroot/home/uploadin/uploading.nl/html/modules/main.inc.php on line 577, referer: ***
Aangezien ik me wat verveelde, heb ik een aangepaste versie van je script gemaakt dat wat beter omgaat met files die je niet ter download wilt aanbieden en die fouten wat minder verbergt.
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<? 
error_reporting(E_ALL);
$sql = 'SELECT * FROM files WHERE filename="'.$this->injectie($_GET['file']).'"'; 
$query = mysql_query($sql); 
if (mysql_numrows($query) == 1)
{
    $info = mysql_fetch_assoc($query); 

    $filename = $info['filename'];
    $file = 'uploads/'.$filename; 
    $size = filesize($file); 

    if (!file_exists($file)) die('Bestaat niet!'); 

    $handle = fopen($file, "rb");  
    if ($handle)
    {
        header('Content-type: '.$info['type']); 
        header('content-length: '.$size);  
        header('content-disposition: attachment; filename='.$filename.'');  

        while (!feof($handle)) {  
            echo fread($handle, 8192);  
        }  
        fclose($handle); 
    }
}
?>

[ Voor 34% gewijzigd door WormLord op 11-06-2006 12:18 ]


Acties:
  • 0 Henk 'm!

Verwijderd

D'r zit in PHP een maximale size aan upload-files die je in kunt stellen. Ik weet niet of je daar mee te maken kan hebben (ik geloof dat je aan het downloaden bent ipv uploaden, maar je kijkt wel in de 'uploads' dir). Dat zou in ieder geval omzeild moeten kunnen worden door het in blokjes te doen zoals eerder aangeraden (dan zit je immers een tijdje onder de limiet en zou je dus data moeten krijgen).

Ik zou ook denken dat het file-rechten kunnen zijn als het de size inderdaad niet is. Afhankelijk van je script en de server zijn de rechten van de uploads directory, en de files daarbinnen belangrijk - evenals de 'owner' van de files versus de user waaronder de scripts gedraaid worden. Ik heb ook wel eens gehad dat door wat wijzigingen e.e.a. misging. Files waren expliciet alleen voor 'nobody' toegankelijk (onder die user werd het script uitgevoerd) en toen kon ik ze niet meer wissen via de FTP, maar wel via een tijdelijk nieuw scriptje :)

Overigens voor de beveiliging is het vaak beter om expliciet bepaalde karakters toe te staan, in plaats van expliciet bepaalde karakters te verbieden. Als je bijvoorbeeld de backslash blokkeert, proberen mensen nog de forward slash te gebruiken. Of dingen als nul-terminators, of bijvoorbeeld zelfs puntkomma's om commando's op de commandline/in queries te scheiden, etc. Dat probleem heb je niet als je expliciet karakters toestaat. Wellicht kom je dan wel een keer een bestand tegen dat niet lukt omdat het een karakter bevat dat wel mag maar je niet in je lijst hebt staan - maar dat is allicht minder erg dan wanneer mensen je passwd file kunnen lezen :)

(edit: in lijn met wat WormLord zegt: zet in je php.ini eens alle warnings/messages aan en laat de gedownloade file niet echo-en. Je kunt dan wellicht veel meer detail zien over wat er mis gaat)

[ Voor 8% gewijzigd door Verwijderd op 11-06-2006 12:08 ]


Acties:
  • 0 Henk 'm!

  • Depress
  • Registratie: Mei 2005
  • Laatst online: 18-09 22:29
@_el, de upload size is ut niet. Die heb ik aangepast in php.ini.
Het probleem is, met blokeren, bestanden kunnen veel verschillende karakters bevatten. Ik wil niet dat mensen hun files niet niett kunnen uploaden.

@Wormlord thx voor het aanpassen...

ik heb je aangepaste verise gebruikt:

Toen ik geen filename op gaf probeerde hij index.wmv te downloaden, met als type video/x-ms-wmv
Dat is dus al goed en leuk, maar dat klotp niet, wat errors van uit de log weg gewerkt. Die zijn er nu niet meer, filename weer gewoon inhoud gegeven. Maar nu krijg ik weer geen output. En de log blijft ook stil...

EDIT:
Voledige code:

PHP:
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
    function download(){
        $size = filesize('uploads/'.$_GET['file']);
        $error = false;
                
        $arr = explode("/", $_GET['file']);

        if (in_array('..', $arr) || in_array('.', $arr)) die('Nee, dit mag niet.');
            
                
            
            mysql_query("UPDATE files SET downs = downs + 1 WHERE filename='".$_GET['file']."'");
            error_reporting(E_ALL); 
            $sql = 'SELECT * FROM files WHERE filename="'.$this->injectie($_GET['file']).'"';  
            $query = mysql_query($sql);  
            $infoU = mysql_fetch_assoc($query);
            if (mysql_numrows($query) != 0){ 
                
                $filename = $infoU['filename']; 
                $file = 'uploads/'.$filename;  

                if($_COOKIE['log_id'] == ""){
                    $sql = 'SELECT * FROM gasten WHERE ip="'.$_SERVER['REMOTE_ADDR'].'"';
                    $query = mysql_query($sql) or die(mysql_error());
                    if(mysql_num_rows($query) == 0){
                        if($size > upload_download){
                            $error = true;
                            $error_mes = download_show_noband;
                        }else{
                            $sql = 'INSERT INTO gasten SET bytes_down = "'.$size.'", ip = "'.$_SERVER['REMOTE_ADDR'].'"';
                            mysql_query($sql)or die(mysql_error());
                        }
                    }else{
                        $info = mysql_fetch_assoc($query);
                        if(($size + $info['bytes_down']) > download_limit){
                            $error = true;
                            $error_mes = download_show_noband;
                        }else{
                            $sql = 'UPDATE gasten SET bytes_down = bytes_down + '.$size.' WHERE ip="'.$_SERVER['REMOTE_ADDR'].'"';
                            mysql_query($sql)or die(mysql_error());
                        }                                   
                    }
                }else{
                    $array = explode('|',$_COOKIE['log_id']);
                    $id = $array[2];
                    $sql = 'SELECT * FROM leden WHERE id="'.$id.'"';
                    $query = mysql_query($sql)or die(mysql_error());
                    $info = mysql_fetch_assoc($query);
                    $sizemax = download_limit;
                    if(($size + $info['bytes_up']) > $sizemax){
                        $error = true;
                        $error_mes = download_show_noband;
                    }else{
                        $new_bytes_down = $info['bytes_down'] + $size;
                        $sql = 'UPDATE leden SET bytes_down = "'.$new_bytes_down.'" WHERE id="'.$id.'"';
                        mysql_query($sql)or die(mysql_error());
                    }
                }
                
                if($error == false){

                    if (!file_exists($file)) die('Bestaat niet!');  

                    $handle = fopen($file, "rb");   
                    if ($handle){ 
                        header('Content-type: '.$infoU['type']);  
                        header('content-length: '.$size);   
                        header('content-disposition: attachment; filename='.$filename.'');   

                        while (!feof($handle)) {   
                            echo fread($handle, 8192);   
                        }   
                        fclose($handle);  
                    }
                }else{
                
                    $this->content_midden = $error_mes;
                
                }
            } 

            
            
            mysql_query("UPDATE stats SET downloads=downloads + 1, bytes_down = bytes_down + ".$size." WHERE date='".date('d:m:Y')."'");
            
 


                
    }

[ Voor 83% gewijzigd door Depress op 11-06-2006 12:57 ]


Acties:
  • 0 Henk 'm!

  • Depress
  • Registratie: Mei 2005
  • Laatst online: 18-09 22:29
schopje

Acties:
  • 0 Henk 'm!

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 19:51

Creepy

Tactical Espionage Splatterer

Je krijgt geen output als in: de download wordt niet gestart? Krijg je wel de juiste headers door? Weet je zeker dat de flow van je stuk code doet wat hij moet doen? Lees: kom je wel in het stuk code waar je de file doorgeeft?

Of eigenlijk in 1 zin: heb je dat stuk code nu al gedebugt en zo ja, wat denk je nu zelf dat er mis gaat? :)

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


Acties:
  • 0 Henk 'm!

  • Depress
  • Registratie: Mei 2005
  • Laatst online: 18-09 22:29
Hoi, nou ik hem de code debugged, want andere bestanden werken wel. Verder heb ik de headers juist, want het info type geeft gewoon de mime_type van het bestend. Want als ik geen filename geef dan krijg ik dat hij index.wmv wil downloaden. Geef ik wel een filename op, dan krijg ik die "404"/no output.

Als er wat fout zou gaan, dan zit dat in de header. Maar daar zie ik niks fout in, het werkt immers bij andere bestanden. Wat ook zo zou kunnen zijn is dat de Length van de file(Lees: Size) door een afronding niet klopt en daarom niet bij grote bestanden werkt, heb geen flauw idee hoe dat op te lossen.

Acties:
  • 0 Henk 'm!

  • ReverendBizarre
  • Registratie: December 2001
  • Laatst online: 24-03-2021
Dat lijkt me sterk. Filesizes worden natuurlijk altijd als integers doorgegeven en die worden niet afgerond. En op de meeste systemen is een standaard integer 32 bits dus kan het rond de 2 miljard of 4 miljard als maximum waarde bevatten (dat is dus een bestand van ca. 2 gig of 4 ca. gig) afhankelijk van of het een signed of unsigned integer is.

Acties:
  • 0 Henk 'm!

  • user109731
  • Registratie: Maart 2004
  • Niet online
Depress schreef op donderdag 15 juni 2006 @ 11:00:
Hoi, nou ik hem de code debugged, want andere bestanden werken wel.
Sorry, maar is dat debuggen? Ik zou zelf zorgen voor 2 bestanden, file1.wmv (wel werkend) en file2.wmv (niet werkend). Dan een test-script schrijven waarin je bijv enkel de filesize opvraagt. Als dat goed gaat zou ik iets doen met file_get_contents. Als dat weer goed gaat via fopen proberen de bestanden te openen. Pas als dat goed gaat, zonder errors en warnings, er in een lus doorheen lopen.
Als daar het probleem zeker te weten niet in zit ga je headers er aan plakken, en test alles weer opnieuw :)

Dan kom je van zelf op het echte probleem uit, nu is het een beetje gokwerk.

[ Voor 27% gewijzigd door user109731 op 15-06-2006 15:29 ]


Acties:
  • 0 Henk 'm!

  • Spider.007
  • Registratie: December 2000
  • Niet online

Spider.007

* Tetragrammaton

Maak dan van
PHP:
1
                    if (!file_exists($file)) die('Bestaat niet!');
eens
PHP:
1
                    if (!is_readable($file)) die('Bestaat niet!');
als je ons niet wilt vertellen wat de rechten op die file zijn

---
Prozium - The great nepenthe. Opiate of our masses. Glue of our great society. Salve and salvation, it has delivered us from pathos, from sorrow, the deepest chasms of melancholy and hate


Acties:
  • 0 Henk 'm!

  • Depress
  • Registratie: Mei 2005
  • Laatst online: 18-09 22:29
De rechten zijn gewoon chmod 644. Daar kan ik niks verder over zeggen, ik ga is readeble nu er eens bij zetten...

Dat is dus idereen mag het lezen. Dat is ook alleen maar nodig.

@Grote prutser, die zijn er, beide geen errors.


EDIT:

Om de een of andere rede werkt het nu...
Ik snap niet hoe het kan...

Edit2:
Ik weet nu waarom het werkt! Het was de max mem size van php toch!

[ Voor 65% gewijzigd door Depress op 08-09-2006 17:34 ]

Pagina: 1