Avatar billede benzon Praktikant
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();
?>
Avatar billede erikjacobsen Ekspert
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?
Avatar billede benzon Praktikant
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
Avatar billede benzon Praktikant
11. januar 2004 - 15:31 #3
og så slipper man jo for at se den rigtige sti :)
Avatar billede benzon Praktikant
11. januar 2004 - 15:36 #4
hehe erikjacobsen i den mappe hvor filerne ligger der ligger kun filer :D
Avatar billede erikjacobsen Ekspert
11. januar 2004 - 15:36 #5
Ja, men må jeg hente dit password til mysql?
Avatar billede erikjacobsen Ekspert
11. januar 2004 - 15:36 #6
Der er intet der forhindrer mig i at skrive  ...?file=../../include.php 
og se alle dine hemmeligheder
Avatar billede benzon Praktikant
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
Avatar billede erikjacobsen Ekspert
11. januar 2004 - 15:45 #8
1) Lad være med at lægge scriptet på nettet
2) Forkaster filnavne med ".." i

Frit valg ;)
Avatar billede benzon Praktikant
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
Avatar billede benzon Praktikant
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
Avatar billede erikjacobsen Ekspert
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.
Avatar billede fet321 Nybegynder
11. januar 2004 - 15:53 #12
benzon >> der er indtil flere ".." i "?file=../../include.php"
høhø
Avatar billede erikjacobsen Ekspert
11. januar 2004 - 15:54 #13
Du kan nok bare
  if (strpos($file,'..')===false) {
    ...lav det hele
  } else {
    print "Marsmændene kommer efter dig";
  }
Avatar billede benzon Praktikant
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";
}
?>
Avatar billede benzon Praktikant
11. januar 2004 - 16:20 #15
er vi enige om det ? :D
Avatar billede benzon Praktikant
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";
}
?>
Avatar billede benzon Praktikant
11. januar 2004 - 16:23 #17
der i stedet do
Avatar billede erikjacobsen Ekspert
11. januar 2004 - 16:24 #18
vistnok - virker det?
Avatar billede benzon Praktikant
11. januar 2004 - 16:24 #19
tjekker om 2 sec
Avatar billede skovenborg Nybegynder
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.
Avatar billede skovenborg Nybegynder
11. januar 2004 - 16:55 #21
...nej lige meget - det bliver tolket som et .-tegn. Men man skal jo være sikker, ik' ;-)
Avatar billede erikjacobsen Ekspert
11. januar 2004 - 16:55 #22
Det er nemlig det samme tegn, og bliver til "." når man aflæser via fx $_GET
Avatar billede benzon Praktikant
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
Avatar billede benzon Praktikant
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
Avatar billede benzon Praktikant
13. juni 2004 - 22:13 #25
lukker
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester