eddi: Welche Datei-Endungen sind "kritisch"?

Beitrag lesen

Re:

function secureURL($filename=FALSE) {
könntest Du mir das wohl erklären?

Deine ursprüngliche Funktion:

  
function secureURL($filename) {  
  $x = 'bin'; $filename = trim($filename);  
  
  $ein = array('ä', 'ö', 'ü', 'ß', 'Ä', 'Ö', 'Ü', '&','§',   ' ','%20','%','<','>','|','/',':','?','*','"',chr(92),chr(10),chr(13));  
  $aus = array('ae','oe','ue','ss','Ae','Oe','Ue','+','Par.','_','_',  '~','~','~','~','~','~','~','~','~','~',    '',     '');  
  for ($i=0; $i<count($ein); $i++) {  
    $filename = str_replace($ein[$i], $aus[$i], $filename);  
  }  
  
  $filename = trim($filename, ".");  
  if(!$filename) $filename = date("d-m-Y_H-i-s").'.'.$x;  
  
/** An dieser Stelle wird in Deiner Funktion abgefragt, ob der Dateiname als Boolenschen Wert "TRUE" oder "FALSE" ergibt. Ich habe keine Ahnung, was Du Dir davon versprichst, noch ob Dir klar ist, welche Werte hier zu "FALSE" führen können.  
Deshalb habe ich mir derart einen Reim daraus gemacht, daß Du vielleicht auch einen Leerstring Deiner Funktion übergeben magst, damit ein eigenständiger Name aus der aktuellen Zeit gebildet wird. Daher habe ich die Funktion komplett anders aufgebaut, sodas sie auch ohne Parameter aufgerufen werden kann, wenn eine andere Routine Deines Scripts bestimmt, daß der via HTTP angelieferte Name nicht verwendet werden soll */  
  
  $ext = strtolower(substr($filename, strrpos($filename, '.')+1));  
  $test = array('php','shtm','htm','class','cgi','fcgi','pl','py','jsp','asp','dll');  
  for ($i=0; $i<count($test); $i++) {  
    if(substr($ext,0,strlen($test[$i])) == $test[$i]) $filename .= '.'.$x;  
  }  
  
  return urlencode($filename);  
}

$filename = trim($filename, ".");
  if($filename===FALSE)

ist das nicht etwas zu früh? Was, wenn "." übergeben wurde?

Da habe ich geschlampt! Vorher sollte natürlich trim(STR,'.'); aufgerufen werden.

if(strpos($test[$i],$ext)===0)
clever - aber das würde dann doch auch harmlose Zeichenketten in der Mitte betreffen.

Deine Definition der mit '.bin' zu erweiternden Datein enthält "php". So werden gleichefalls alle Datein , die auf "php3", "php4" und "php5" enden, erfaßt. Was Du mit "harmlosen Zeichen in der Mitte" meinst, da substr($filename, strrpos($filename, '.')+1) den letzten Punkt des Dateinamen sucht und ab dieser Position die abzuprüfenden Erweiterung bildet, ist mir wiederum nicht klar.

Ich wundere mich allerdings, daß bei Anforderung von 'Mail_Mime-1.3.1.cgi.bin' Forbidden kommt (bei Stanardeinstellung von all-inkl.com). Sollte ich '.cgi' besser ganz löschen? Ist ja blöd, wenn eine hochgeladene Datei nicht abgerufen werden kann.

Diesen Fehler habe ich produziert und mich auch gewundert, was da schief läuft. Allerdings habe ich auch keine einleuchtende Erklärung parat.
 Vermutlich wird es das Beste sein die brisanten Endungen zu entfernen.

Gruß aus Berlin!
eddi

--
Achte die Kleinigkeiten, aber liebe das Detail!