11. januar 2004 - 15:27
Der er
24 kommentarer og 1 løsning
Kunne man lave dette script bedre?
<? $filename = $_GET['file']; $kate = $_GET['kate']; $sti = "sti/til/download"; $filename = "$sti/$filename"; $ext = substr( $filename,-3 ); if( $filename == "" ) { echo "<html><body>ERROR: Empty file to download. USE download.php?file=[file path]</body></html>"; exit; } elseif ( ! file_exists( $filename ) ) { echo "<html><body>ERROR: File not found. USE download.php?file=[file path]</body></html>"; exit; }; switch( $ext ){ case "pdf": $ctype="application/pdf"; break; case "exe": $ctype="application/octet-stream"; break; case "zip": $ctype="application/zip"; break; case "doc": $ctype="application/msword"; break; case "xls": $ctype="application/vnd.ms-excel"; break; case "ppt": $ctype="application/vnd.ms-powerpoint"; break; case "gif": $ctype="image/gif"; break; case "png": $ctype="image/png"; break; case "jpg": $ctype="image/jpg"; break; default: $ctype="application/force-download"; } header("Pragma: public"); header("Expires: 0"); header("Cache-Control: must-revalidate, post-check=0, pre-check=0"); header("Content-Type: $ctype"); $user_agent = strtolower ($_SERVER["HTTP_USER_AGENT"]); if ((is_integer (strpos($user_agent, "msie"))) && (is_integer (strpos($user_agent, "win")))) { header( "Content-Disposition: filename=".basename($filename).";" ); } else { header( "Content-Disposition: attachment; filename=".basename($filename).";" ); } header("Content-Transfer-Encoding: binary"); header("Content-Length: ".filesize($filename)); readfile("$filename"); exit(); ?>
Annonceindlæg fra SuperOffice
11. januar 2004 - 15:29
#1
Det ser fint ud - jeg kan vist downloade alle file på dit site. Også dem med passwords og andre hemmeligheder i. Det er vel meningen?
11. januar 2004 - 15:30
#2
det er fordi leach og misbrug af download sektion skal stoppes derfor er jeg igang med at bygge en funktion som så skal tage vare på de ting
11. januar 2004 - 15:31
#3
og så slipper man jo for at se den rigtige sti :)
11. januar 2004 - 15:36
#4
hehe erikjacobsen i den mappe hvor filerne ligger der ligger kun filer :D
11. januar 2004 - 15:36
#5
Ja, men må jeg hente dit password til mysql?
11. januar 2004 - 15:36
#6
Der er intet der forhindrer mig i at skrive ...?file=../../include.php og se alle dine hemmeligheder
11. januar 2004 - 15:42
#7
nej ok der har du ret do :| Bum så skal jeg ha fundet ud af hvordan jeg stopper dig i at gøre det
11. januar 2004 - 15:45
#8
1) Lad være med at lægge scriptet på nettet 2) Forkaster filnavne med ".." i Frit valg ;)
11. januar 2004 - 15:48
#9
hehe erikjacobsen :D dig i en nødeskal at komme med de der gode first liners ^^ tror ikke der er nogen af filerne der har .. i der er max . i dem hehehehe :D
11. januar 2004 - 15:50
#10
er det ikke bare noget i stil med $side = ereg_replace("([^0-9a-zA-Z])","",$side); der mangler så godkendelse af . der i :| og kan ikke huske hvor pokker jeg adder det haha ereg_replace er ikke en god kop te
11. januar 2004 - 15:52
#11
Jah, hvis du har min..familie.jpg skal du gøre det lidt smartere, nemlig checke om at af katalogerne i filnavnet er .. Men det plejer man jo typisk ikke.
11. januar 2004 - 15:53
#12
benzon >> der er indtil flere ".." i "?file=../../include.php" høhø
11. januar 2004 - 15:54
#13
Du kan nok bare if (strpos($file,'..')===false) { ...lav det hele } else { print "Marsmændene kommer efter dig"; }
11. januar 2004 - 16:20
#14
<? if (strpos($file,'..')===false) { $filename = $_GET['file']; $sti = "fil_arkiv/db5901dc3e70996ec620d9ba3d987648/filelib/bench"; $filename = "$sti/$filename"; $ext = substr( $filename,-3 ); if( $filename == "" ) { echo "<html><body>ERROR: Empty file to download. USE download.php?file=[file path]</body></html>"; exit; } elseif ( ! file_exists( $filename ) ) { echo "<html><body>ERROR: File not found. USE download.php?file=[file path]</body></html>"; exit; }; switch( $ext ){ case "pdf": $ctype="application/pdf"; break; case "exe": $ctype="application/octet-stream"; break; case "zip": $ctype="application/zip"; break; case "doc": $ctype="application/msword"; break; case "xls": $ctype="application/vnd.ms-excel"; break; case "ppt": $ctype="application/vnd.ms-powerpoint"; break; case "gif": $ctype="image/gif"; break; case "png": $ctype="image/png"; break; case "jpg": $ctype="image/jpg"; break; default: $ctype="application/force-download"; } header("Pragma: public"); header("Expires: 0"); header("Cache-Control: must-revalidate, post-check=0, pre-check=0"); header("Content-Type: $ctype"); $user_agent = strtolower ($_SERVER["HTTP_USER_AGENT"]); if ((is_integer (strpos($user_agent, "msie"))) && (is_integer (strpos($user_agent, "win")))) { header( "Content-Disposition: filename=".basename($filename).";" ); } else { header( "Content-Disposition: attachment; filename=".basename($filename).";" ); } header("Content-Transfer-Encoding: binary"); header("Content-Length: ".filesize($filename)); readfile("$filename"); exit(); } else { echo "Ingen fil tilgængelig"; } ?>
11. januar 2004 - 16:20
#15
er vi enige om det ? :D
11. januar 2004 - 16:23
#16
<? $filename = $_GET['file']; if (strpos($filename,'..')===false) { $sti = "fil_arkiv/db5901dc3e70996ec620d9ba3d987648/filelib/bench"; $filename = "$sti/$filename"; $ext = substr( $filename,-3 ); if( $filename == "" ) { echo "<html><body>ERROR: Empty file to download. USE download.php?file=[file path]</body></html>"; exit; } elseif ( ! file_exists( $filename ) ) { echo "<html><body>ERROR: File not found. USE download.php?file=[file path]</body></html>"; exit; }; switch( $ext ){ case "pdf": $ctype="application/pdf"; break; case "exe": $ctype="application/octet-stream"; break; case "zip": $ctype="application/zip"; break; case "doc": $ctype="application/msword"; break; case "xls": $ctype="application/vnd.ms-excel"; break; case "ppt": $ctype="application/vnd.ms-powerpoint"; break; case "gif": $ctype="image/gif"; break; case "png": $ctype="image/png"; break; case "jpg": $ctype="image/jpg"; break; default: $ctype="application/force-download"; } header("Pragma: public"); header("Expires: 0"); header("Cache-Control: must-revalidate, post-check=0, pre-check=0"); header("Content-Type: $ctype"); $user_agent = strtolower ($_SERVER["HTTP_USER_AGENT"]); if ((is_integer (strpos($user_agent, "msie"))) && (is_integer (strpos($user_agent, "win")))) { header( "Content-Disposition: filename=".basename($filename).";" ); } else { header( "Content-Disposition: attachment; filename=".basename($filename).";" ); } header("Content-Transfer-Encoding: binary"); header("Content-Length: ".filesize($filename)); readfile("$filename"); exit(); } else { echo "Ingen fil tilgængelig"; } ?>
11. januar 2004 - 16:23
#17
der i stedet do
11. januar 2004 - 16:24
#18
vistnok - virker det?
11. januar 2004 - 16:24
#19
tjekker om 2 sec
11. januar 2004 - 16:50
#20
hmm, hva' hvis man skrev: ...?file=%2E%2E/%2E%2E/include.php %2E er jo det samme tegn som punktum - prøv lige at check om man godt kan få adgang til filen den vej fra.
11. januar 2004 - 16:55
#21
...nej lige meget - det bliver tolket som et .-tegn. Men man skal jo være sikker, ik' ;-)
11. januar 2004 - 16:55
#22
Det er nemlig det samme tegn, og bliver til "." når man aflæser via fx $_GET
11. januar 2004 - 18:05
#23
fatter det ikke det er som om nogle gange vil den sende filen andre gange vil den ikke det driver mig sku lidt til vanvid at den er lidt random
11. januar 2004 - 18:13
#24
har prøvet at adde clearstatcache(); i toppen af siden hved ikke helt hvordan den funktion virker da jeg ikke har kunne finde info om den men hved den stod under file_exists funktionen på php.net
13. juni 2004 - 22:13
#25
lukker
Vi tilbyder markedets bedste kurser inden for webudvikling