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!
Mach es so:
<?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
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
$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
<?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
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