System: header.inc.php / footer.inc.php

Bash, Shell, PHP, Python, Perl, CGI
[ djthesound ]
Posts: 300
Joined: 2003-04-21 01:15

System: header.inc.php / footer.inc.php

Post by [ djthesound ] »

Hi Leuts,

wollte eben was coden, wo ich nicht immer wieder in jeder HTML-Seite header und footer eintragen muss. Es soll folgendes Schema mittels PHP dabei rauskommen:

Code: Select all

index.php

<?
include (header.inc.php;
include (parameter);
include (footer.inc.php);
?>
Allerdings möchte ich nicht in jeder Datei header und footer "includen", sondern durch einen Parameter aufrufen lassen. Beispiel:

Code: Select all

http://www.domain.com/index.php?content=startseite
http://www.domain.com/index.php?content=news
...
Wie kann ich sowas realisieren bzw. wie ist das System dann auch sicher, da ich schon Bemerkungen im WWW gelesen habe, das dies _NICHT_ allzu sicher sein sollte, da der User somit in Unerverzeichnisse rein kommt.

Wer hat passende Infos, Links oder fertige (Mini)skripte? Ich bin leider nicht wirklich für das Passende fündig geworden. Vielen Dank für eure Hilfe!
oxygen
Posts: 2138
Joined: 2002-12-15 00:10
Location: Bergheim

Re: System: header.inc.php / footer.inc.php

Post by oxygen »

Normalerweise würde man das dann so machen:

Code: Select all

<?php
include (header.inc.php);
 
	if(isset($_GET['content'])) include ("$content.php");
	else include ("start.php");
	}

include (footer.inc.php); 
?>
Das ist in der Tat ziemlich unsicher weil so jedes .php file includiert werden kann.[/code]
dodolin
Posts: 3840
Joined: 2003-01-21 01:59
Location: Sinsheim/Karlsruhe

Re: System: header.inc.php / footer.inc.php

Post by dodolin »

Das ist in der Tat ziemlich unsicher weil so jedes .php file includiert werden kann.
Nö, include_path richtig setzen hilft.

http://de.php.net/manual/en/function.include.php
http://de.php.net/manual/en/configurati ... clude-path
[ djthesound ]
Posts: 300
Joined: 2003-04-21 01:15

Re: System: header.inc.php / footer.inc.php

Post by [ djthesound ] »

øxygen wrote:Normalerweise würde man das dann so machen:

Code: Select all

<?php
include (header.inc.php);
 
	if(isset($_GET['content'])) include ("$content.php");
	else include ("start.php");
	}

include (footer.inc.php); 
?>
Das ist in der Tat ziemlich unsicher weil so jedes .php file includiert werden kann.[/code]
Hallo, ja danke. Das habe ich schonmal so gesehen, aber:

Code: Select all

Parse error: parse error in /var/www/virtual/meinedomain.com/htdocs/index.php on line 6
oxygen
Posts: 2138
Joined: 2002-12-15 00:10
Location: Bergheim

Re: System: header.inc.php / footer.inc.php

Post by oxygen »

Hm, keine Ahnung wie sich die Klammer da rein gemogelt hat:

Code: Select all

<?php 
include (header.inc.php); 

   if(isset($_GET['content'])) include ("$content.php"); 
   else include ("start.php"); 

include (footer.inc.php); 
?> 
btw: Am besten man nennt das Script index.phtml damit keine Schleife durch ?content=index erzeugt werden kann.
[ djthesound ]
Posts: 300
Joined: 2003-04-21 01:15

Re: System: header.inc.php / footer.inc.php

Post by [ djthesound ] »

Hallo,

danke für die Ausbesserung, habe da noch was entdeckt und zwar bei header.inc.php und footer.inc.php habe ich noch Anführungszeichen setzten müssen, sonst habe ich auch einen Parse-Error bekommen:

Code: Select all

<?php 
include ("header.inc.php"); 

   if(isset($_GET['content'])) include ("$content.php"); 
   else include ("startseite.php"); 

include ("footer.inc.php"); 
?>
btw: Am besten man nennt das Script index.phtml damit keine Schleife durch ?content=index erzeugt werden kann.
Und wo ist der unterschied dann dabei? Wenn ich keine Links zu index.php?content=index setzte, sollte das eigentlich kein Problem sein? Oder doch?
oxygen
Posts: 2138
Joined: 2002-12-15 00:10
Location: Bergheim

Re: System: header.inc.php / footer.inc.php

Post by oxygen »

Sicher kann das Probleme geben. Jeder der etwas php kann, kann sich die Struktur denken und das manuell eingeben.
[ djthesound ]
Posts: 300
Joined: 2003-04-21 01:15

Re: System: header.inc.php / footer.inc.php

Post by [ djthesound ] »

Hallo,

oky, dann werd ich es wohl so machen (müssen), bevor mir jemand meinen Server ins Nirvana knallt. Danke dir für den Tip.

Nachdem ich jetzt in einen Unterordner verlinke (mit den Parameter), ist mir nochwas eingefallen... und zwar ein "Failsafe-System"... gibt also jemand einen falschen Link ein (index.php?content=gibtsnicht) möchte ich, dass dieser auf die Startseite geleitet wird.

Ist das für deine Begriffe sicher und sinnvol, denn sonst kommt ja nur einen PHP-Fehlermeldung, die auch nicht so toll aussieht *g* Wie würdest du das machen?
oxygen
Posts: 2138
Joined: 2002-12-15 00:10
Location: Bergheim

Re: System: header.inc.php / footer.inc.php

Post by oxygen »

Ist auf jedenfall sinnvoll. Entweder man gibt eine Liste der erlaubten Dateien vor und fragt dann ab ob die aufgerufen Datei im array steht, oder man prüft mit file_exist().
[ djthesound ]
Posts: 300
Joined: 2003-04-21 01:15

Re: System: header.inc.php / footer.inc.php

Post by [ djthesound ] »

Hallo, guten Abend!

Ja danke für den Tip mit file_exist(). Ich habe das jetzt so gelöst - also eigentlich gefällt mir das schonmal ganz gut :wink: - hast du noch einen Verbesserungvorschlag?

Code: Select all

<? 

// ------ Diverse Konfigurationen ------------------------------

// Content Ordner:
$contdir = "content/";

// Dateiendung im obigen Ordner:
$fileend = ".inc.php";

// Standartdatei, wenn kein Parameter angegeben wird:
$default = "index";

// -----------------------------------------------------------------------------

$file = $contdir.$_GET['content'].$fileend;
$defaultfile = $contdir.$default.$fileend;

// -----------------------------------------------------------------------------

include ("header.inc.php"); 

if (file_exists($file))
  {
    include ("$file");
  } else {
    include ("$defaultfile"); 
  }

//   Unsinnig, weil oben überprüft wird:
//   if(isset($_GET['content'])) include ("$file"); 
//   else include ("$defaultfile"); 

include ("footer.inc.php");

// -----------------------------------------------------------------------------

?>