Sponsor-Board.de

Normale Version: PHP oder HTML
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hey,
ich wollte mal fragen, was besser ist:
HTML in .html lassen oder
Das ganze in PHP und mit der GET Methode die weiteren Seiten laufen lassen

Was ist Sicherer, was ladet schneller/besser.

THX im vorraus!
-
-
-

gmspace schrieb:
Mach es so:

PHP-Code:
    <?php
    
if(!isset($_GET['site'])){
        include(
"home.php");
    }else{
        include(
$_GET['site'].'.php');
    }
    
    
?>

Wenn man dann macht: index.php?site=lol, dann wird die Datei "lol.php" an der Stelle "includet", wo dieser Code steht.
Wenn man angibt, z.B index.php?site=test, und "test.php" nicht existiert, dann "includet" er an dieser stelle einfach die home.php ...
lG


Ja und damit schaffst du schön eine Local File Inclusion Lücke. Ist so ziemlich die fatalste Lücke, da man damit den kompletten Server übernehmen kann.

-
Wenn man index.php?site=test eingibt kommt nen fehler raus nur so als info Wink

Du musst dann noch abfragen ob die Datei existiert und ob sie auch eine Seitedatei ist (am besten ein array mit Systemdaten machen und abfragen ob die Seite im array nicht vorhanden ist)
Du überprüfst damit die GET Variable nicht ausreichend und man kann daher jeden beliebigen Pfad angeben. So wäre es möglich eine so genannte Shell einzubinden, mit der alles möglich wäre (Hochladen, löschen, ändern von Dateien, MySQL Datenbank einsehen, etc.).

Eine sichere Methode wäre das hier:

PHP-Code:
<?php
$whitelist 
= array(
                
'home',
                
'news',
                
'subpage',
                
'contact'
            
);

if(isset(
$_GET['page']) && in_array($_GET['page'], $whitelist)) {
    include(
$_GET['page'].'.php');
} else {
    include(
'home.php');
}
?>

Man müsste vorher alle erlaubten Seite in der Whitelist eintragen und nur diese sind dann erlaubt.

Wäre es nicht besser, das so zu schreiben? Erspart man sich die Arbeit, alles in ein Array einzutragen Wink

PHP-Code:
<?php
    
//Falls der User keine Seite angegeben hat
    
if(!isset($_GET['page']))
    {
        
//Include eine Standard-Datei
        
include('./pages/main.php');
    }else{ 
//Ansonsten
        
$path './pages/'.preg_replace("/[^A-Z a-z]/"""$_GET['page']).'.php';
        
//Prüfe ob diese Datei vorhanden ist
        
if(file_exists($path))
            include_once(
$path); //Include diese Datei
        
else
            include_once(
'./pages/404.php'); //Include die Fehler-Page
    
}
?>


Wäre jetzt nur ein kleines Beispiel.

Preg_replace kümmert sich darum, das nur Buchstaben in einem String vorkommen dürfen. Alles andere sollte durch "nichts" ersetzt werden. Ist gerade alles ausm Kopp geschrieben, daher weiß ich nicht ob es wie erwartet funktioniert, gehe aber davon aus.

Zwecks übersichtlichkeit solltest du alle Seiten, die man includet, in einen Unterordner verschieben. Für zusätzliche Sicherheit sollte man eine Variable definieren, und in der zu includenen Datei überprüfen, ob diese definiert worden ist. Falls nicht, sofort ein "exit" raushauen. Denn es hat ja schon seinen Grund warum die Datei geincludet werden soll, oder nicht?

Kevin hat aber schon ganz richtig geschrieben, so könnte jeder z.B. wenn er

Code:
index.php?site=./config.php

aufruft, die Config.php includen, womöglich noch anderes. Bestes Beispiel sind dann immer Linux Systemdateien, etc. wenn der Webspace nicht abgesichert ist.

Lg

Zitat:
Wäre es nicht besser, das so zu schreiben? Erspart man sich die Arbeit, alles in ein Array einzutragen Wink


genau deswegen andersum Smile nur die systemdaten im array wie mysql, settings und so Smile

Und was ist wenn du einen link wie seite wie forum_board oder so hast Biggrin? ich würde noch unterstirch gelten lassen Wink

Seiten: 1 2 3 4
Referenz-URLs