PHP - Sicherheitslücke - Wie fixen und überhaupt relevant in diesem Fall?

...komplette Frage anzeigen

1 Antwort

Das was du da vorhast ist ein absolutes No-Go und eine der größten Sicherheitslücken die man überhaupt konstruieren kann! Dein Code erlaubt einem potenziellen Angreifer unkontrolliert Zugriff auf jede Datei auf deinem kompletten Server. Und durch die URL kann man das direkt sehen, weil du einen Dateinamen übergibst. Was man damit machen kann ist z.B. auf die passwd-Datei des Webservers zuzugreifen, Skripte in nicht festgelegter Reihenfolge aufrufen (was eine potenzielle Sicherheitslücke ist) oder gar andere Webseiten aufrufen (je nach Konfiguration). Niemals Variablen in include/require verwenden, es sei denn dass du dessen Inhalt genau überprüfst (Whitelist).

Wenn du´s schon dirty machst, dann bitte so:

$sites = array( "home" => "home.php", "about" => "impressum.php"); 
include "/site/". $sites[array_key_exists($_GET["site"],$sites) ? $_GET["site"] : exit() ];

Die Verwendung von nicht-existenten Variablen ist keine Sicherheitslücke, kann aber eine werden wenn der verwendende Befehl dadurch ein ungewolltes Verhalten an den Tag legt und somit eine potenzielle Lücke darstellt.

Um dein Skript abzusichern solltest du

  • absolut jede Eingabe auf Inhalt prüfen. Wenn´s irgendwie möglich ist mit einer Whitelist, ansonsten (z.B. bei Nachrichten-Text) wenigstens gefährliche Zeichen escapen. Jeder Angriff auf dein Skript (ausgenommen sind DoS-Angriffe, die richten sich auf den Server) läuft über die Eingaben (GET, POST, COOKIE). Daher solltest du dort nur das zulassen was du auch erwartest.
  • Variablen die Zugangsdaten beinhalten direkt nach dem Aufbau der Verbindung leeren (unset)
  • Sicherstellen dass man include-Skripte nicht einfach so aufrufen kann, sondern nur die von dir gewollten (mithilfe einer Konstanten)
  • Gib dem Angreifer keine Information. Im Produktivbetrieb schalte "display errors" aus und verrate auch nichts über den Server (Servername, Version, PHP-Version, etc). Tarne deine *.php-Dateien als *htm-Dateien mit mod_rewrite
Antwort bewerten Vielen Dank für Deine Bewertung
Kommentar von netcube
23.02.2015, 16:47

Interessant. Frage, was ist genau eine Konstante? Wäre eine bessere Lösung einfach eine Datei zu erstellen und einfach eine Datei namens Top.php für das Menü und so und eine Bottom.php für das Ende der Seite zu includen? Danke für den Script, danke für die Aufklärung (Ich bin leider noch in keiner Ausbildung, darf noch in die Schule).

0

Was möchtest Du wissen?