• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Viele hassen ihn, manche schwören auf ihn, wir aber möchten unbedingt sehen, welche Bilder Ihr vor Eurem geistigen Auge bzw. vor der Linse Eures iPhone oder iPad sehen könnt, wenn Ihr dieses Wort hört oder lest. Macht mit und beteiligt Euch an unserem Frühjahrsputz ---> Klick

PHP: Get-sicher?

Apple Pro

Granny Smith
Registriert
13.10.08
Beiträge
15
Hallo,
ich habe durch folgenden Code Inhalt aus einer anderen Datei in eine Tabelle gebracht:
Code:
<?php include($_GET['i]);
?>
Ich wollte mal wissen ob diese Methode sicher ist, oder man evtl. dadurch alle Dateien auf dem Server auslesen könnte etc.
 

Bananenbieger

Golden Noble
Registriert
14.08.05
Beiträge
25.515
Nö. Damit kann ein Angreifer jede Datei auf dem Server auslesen (sofern Dein Webserver/Dein (Fast)CGI die betreffenden Zugriffsrechte hat).

Mit dem Code kannst ein Angreifer sogar Quelltext von einem anderen Server laden und ausführen (z.B., wenn er über GET "http://seinedomain.de/seinboesesskript.phps" übergibt).
 

Maluku

Finkenwerder Herbstprinz
Registriert
10.05.08
Beiträge
464
Ich verstehe meistens eh nicht, warum die Leute immer anhand eines URL-Parameters einbinden wollen. Das kann man so gar nicht optimieren Serverseitig.

Meistens ist es doch so: Man baut eine HTML-Seite als Hauptdesign mit 1,2 PHP tags die die Seite die angezeigt werden soll einbindet. Warum nicht das Haupt design in zwei einfache Funktionen legen :
header(), footer() und dann diese Datei in jeder anderen einbinden. Da hat man zwar einmal mehr Arbeit, aber dann sehr viel weniger Probleme. Oder gleich ein vernünftiges Templatesystem.

Oder gibt es sonst noch Gründe für solche Konstruktionen?
 

mokoi

Braeburn
Registriert
20.06.08
Beiträge
45
dann macht ihr aber nur niederkomplexe seiten :)

In der Regel sieht eine URL so aus: "bla.com/de/profile/max_muster/"
Was ja Im Prinzip nichts anderes ist als "bla.com/index.php?lang=de&page=profile&name=max_muster".

An sich ist das nicht unsicher - wichtig ist, dass man die per GET erhaltenen values IMMER erst überprüft bevor man sie weiterverwendet oder die includes (wenn die einzubindenden Seiten feststehen und keine dynamischen Inhalte berücksichtigt werden müssen) via switch-case einbindet:


Code:
(isset($_GET['i']) ? ($i = $_GET['i']) : ($i = FALSE);

switch($i) 
{
    case 'kontakt': 
                include('contact.inc.php');
    break;
    
    case 'impressum':
                include('imprint.inc.php');
    break;
    
    default:
                include('error.inc.php');
}
 

Maluku

Finkenwerder Herbstprinz
Registriert
10.05.08
Beiträge
464
normalerweise würde ich sowass mit der Rewrite Engine des Apache lösen...
 

Bananenbieger

Golden Noble
Registriert
14.08.05
Beiträge
25.515
Man kann auch einfach ein anständiges Framework wie Cake, CodeIgniter oder Symfony nehmen. Dann hat man die ganzen Probleme erst gar nicht.
 

mokoi

Braeburn
Registriert
20.06.08
Beiträge
45
Man kann auch einfach ein anständiges Framework wie Cake, CodeIgniter oder Symfony nehmen. Dann hat man die ganzen Probleme erst gar nicht.

Man kann auch mit Spatzen auf Kanonen schiessen. Hängt wohl von den konkreten Anforderungen ab - oftmals gibt es ja auch CMS die dem gewünschten Funtionsumfang nahe kommen. Ich arbeite eigentlich nie mit Frameworks (bei neuen Projekten) sondern mit eigenen Blueprints oder wenns passt Drupal oder WP(mu) mit eigenen modules.

Ich denke mal, dass das jetzt am Ausgangspost vorbei geht. Bei kleineren Seiten spricht ja auch nichts gegen was "handgestricktes" und GET (ob mit oder ohne mod_rewrite) ist per se nicht unsicherer als andere Möglichkeiten ;)
 

Bananenbieger

Golden Noble
Registriert
14.08.05
Beiträge
25.515
Was heißt "mit Kanonen auf Spatzen schießen"? Es gibt Frameworks für jede Anforderung: Von sehr schlanken, für kleine Sites und Apps ausgelegte FWs hin zu Enterprise-grade FWs gibt es doch alles.

Und selbst bei einer kleinen Site ist es nicht sinnvoll, das Rad neu zu erfinden, wenn man auf ein vorgefertigtes Framework zurückgreifen kann. Durch Frameworks kann man sich eine Menge Arbeit und Nerven sparen. Stichwort: RAD.