Sicheres Include Tipps gesucht

  • Themenstarter Themenstarter starfoxfs
  • Beginndatum Beginndatum
S

starfoxfs

Hi zusammen,

Ich hab mir ein Include gebaut und wollte nun von euch mal hören wie "sicher" ihr dieses findet oder was man noch in Punkto Sicherheit verbessern könnte.

PHP:
if(!isset($_GET["ctg"])) { 

$ctg = "news"; 

} else {

$ctg = $_GET["ctg"];
}

switch($ctg) {

case 'news' if(file_exists("./content/news.php")) { include("./content/news.php"); } break;
case 'agb': if(file_exists("./content/agb.php")) { include("./content/agb.php"); } break;

usw .
.
.
}

Zusätzliche Frage wenn ich mir per $_GET Strings aus der URL hole was sollte ich hier in Punkto Sicherheit beachten ?
Momentan formatiere ich $_POST und $_GET so:
PHP:
$modell = stripslashes(htmlspecialchars($_POST["modell"]));
$modell = stripslashes(htmlspecialchars($_GET["modell"]));
 
Hi,
scheint 'sicher zu sein'. Ich würde halt noch eine default: am Ende der Switch-Abfrage definieren, damit auch falls keine Übereinstimmung stattfindet, eine Standardseite includet wird.
Im allgemeinen benutzt ich zumindest noch öfters preg_match() um die Variable auf den Typ etc. zu überprüfen (z.b. nur Zahlen, oder Alphanummerik).
PS: Das spart doch etwas Code:
PHP:
switch($ctg) {
case 'news': $site = "./content/news.php"; break;
case 'agb': $site = "./content/agb.php"; break;
default: $site = ".content/home.php";
}  
if(file_exists($site)) { include($site); }
 
Zuletzt bearbeitet:
Zusätzliche Frage wenn ich mir per $_GET Strings aus der URL hole was sollte ich hier in Punkto Sicherheit beachten ?
Momentan formatiere ich $_POST und $_GET so:
PHP:
$modell = stripslashes(htmlspecialchars($_POST["modell"]));
$modell = stripslashes(htmlspecialchars($_GET["modell"]));
Eine Verallgemeinerung ist hier nicht sinnvoll. Du solltest nur die Funktionen anwenden, die du auch wirklich brauchst.
Wenn du die Daten in deinem HTML-Dokument ausgeben möchtest, benutze die htmlspecialchars()-Funktion – aber auch nur dann. Wenn du die Daten in einer MySQL-Datenbankabfrage nutzen möchtest, benutze die mysql_real_escape_string()-Funktion oder gleich Prepared Statements – aber auch nur dann. Für andere Sprachen analog.
Beides hier zu vermischen und prophylaktisch anzuwenden ist zwar bequem (man muss nicht nachdenken), kann aber auch zu Fehlern führen und die Daten verfälschen.


PS: Wenn schon gezig, dann wirklich richtig geizig:
PHP:
$ctg = isset($_GET['ctg']) ? $_GET['ctg'] : 'news';
 
Zurück