• Das kreative Thema des Monats Oktober wird vor allem diejenigen unter Euch besonders ansprechen, denen Do-it-yourself quasi im Blut liegt. Zeigt uns Eure Improvisationskünste oder fotografiert, was andere Leute sich so im Alltag zusammengestrickt haben. --> Zum Mitmachen bitte hier klicken

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.
 
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).
 
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?
 
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');
}
 
normalerweise würde ich sowass mit der Rewrite Engine des Apache lösen...
 
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 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 ;)
 
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.