Robert Bienert: Remote File Include Vulnerability

Beitrag lesen

Moin!

nach allem was ich sehen kann ist das das erste auftreten (initalisierung) der language_file, hier wird der wert zugewiesen.

Allerdings mit einem ungeprüften Wert, deshalb der Hinweis auf dirname oder basename.

ich glaube zwar nicht, das da das probleml liegt, aber wäre es nicht möglich am ende der funktion (anstatt des return) einfach mit case "abfragen" welchen wert sie hat?

switch ($language_file) (
case "language/english.php"
return $language_file;
  break 1;
case "language/german.php"
return $language_file;
  break 1;
default:
$language_file = "language/english.php";
return $language_file; }

  
Abgesehen, dass das doppelt gemoppelt ist (Englisch ist doch Default, also brauchst du darauf nicht explizit zu testen), würde ich das ganze radikal vereinfachen:  
  
~~~php
switch ($language) (  
    case 'de':  
        return 'language/german.php';  
    case 'en':  
    default:  
        return 'language/english.php';  
}

Damit werden auch keine Eingabewerte mehr (direkt) in Pfadangaben verwendet, d.h. ein Codeschmuggel ist unmöglich.

Viele Grüße,
Robert