Include
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
anweisung
beitrag
beliebiger quelltext
break
datei
dateiname
dingen
gedacht
injection
neuling
nutzer
page
parameter
quelltext
scout
startseite
unterverzeichnis
variable
vertraut bitte
verzeichnis
-
Hallo,
ich mache jetzt meine HP neu und verwende dazu includes.
Also es wird eine Variable über GET übergeben und danach wird dann includiert.
Das Include erfolgt aber erst weiter unten im Quelltext, also da wo es hingehört.
Nun möcht ich aber den Seitentitel dem Include ändern.
Dieses wird aber erst später eingebunden, und demnach kennt er den Seitentitle, der im Include definiert ist, noch nicht.
Gibt es da eine Möglichkeit das irgendwie zu lösen ohne ein 2. Include??
Ich hoffe ich hab das jetzt verständlich erfragt, ansonsten einfach nachfragen. -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Ich habs noch nicht ganz verstanden.
Wenn du den Scriptteil posten könntest, wäre das klasse. Dann kann man dir viel einfacher helfen. -
Ich habs noch nicht ganz verstanden.
Wenn du den Scriptteil posten könntest, wäre das klasse. Dann kann man dir viel einfacher helfen.
OK.
Ich hab alles unwichtige ausgeschnitten.
Hier eine Beispielurl: http://philippkern.at.gg/?p=home
(Ist aber noch nicht online)
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>PhilippKern.at.gg - <?php echo $pagetitle;?> - by Philipp KERN</title> <meta http-equiv="content-type" content="text/html;charset=utf-8" /> <meta name="content-language" content="de" /> <meta name="author" content="Philipp Kern" /> <meta name="copyright" content="Philipp Kern" /> <meta name="keywords" content="" /> <meta name="description" content="" /> <meta name="language" content="Deutsch" /> <meta name="robots" content="index,follow" /> <!-- <base href="http://philippkern.at.gg/" /> --> <meta name="date" content="2007-10-07T+02:00" /> <link rel="stylesheet" type="text/css" href="style_kp.css" /> <link rel="shortcut icon" type="image/x-icon" href="images/favicon_kp.ico" /> </head> <body> <div id="container"> //Ausgeschnitten <div id="navi"> <?php include "pages/navi.inc"; ?> </div> <?php $page = $_GET['p']; if($page=="") include "pages/home.inc"; else include "pages/".$page.".inc"; ?> </div> <br><div class="copyright">Copyright © 2007 Philipp Kern</div><br> </body> </html>
Und hier eine der Include-Datein:
<?php $pagetitle = "Home"; ?> <hr /><br /><br /> <img src="images/beg1.gif" border="0" /> <p>Hallo,<br />dies ist meine erste selbst erstellte Homepage. Ich biete euch hier Links zu Games, Downloads und zu nützlichen Seiten an. Es gibt auch ein <a href="?p=forum" />Forum</a> in dem man diskutieren kann.<br /> Ich würde mich über einen Eintrag in mein <a href="?p=gaestebuch" />Gästebuch</a> freuen und ich hoffe das ihr mir Verbesserungsvorschläge (falls nötig) und am besten deren Umsetzung mitteilen könnt.</p> <br /><br /><hr />
Also es wird immer eine *.inc-Datei includiert (eigentlich 2) und der pagetitle soll immer dem Include entsprechend geändert werden.
Aber das geht so natürlich nicht, da das Include erst nach der Ausgabe des $pagetitle ist.
Gibt es da eine Möglichkeit das anders zu machen.
Hoffe das ist verständlich. -
Du kannst die $_GET doch einfach ganz am anfang deines Scripts auslesen und dann an Hand dieser den Seitentitel ändern, z.B. indem du alle Seitentitel in einem assoziativen Array speicherst und den richtigen dann aufrufst.
-
Du kannst die $_GET doch einfach ganz am anfang deines Scripts auslesen und dann an Hand dieser den Seitentitel ändern, z.B. indem du alle Seitentitel in einem assoziativen Array speicherst und den richtigen dann aufrufst.
Also was ein "assoziatives Array" ist weiß ich jetzt nicht aber, das hab ich mir auch schon gedacht. Also für den Pagetitle das übergebene "p" zu nehmen, aber das ist nicht so gut da ich zB Home haben will aber die Datei heißt aber home. -
machst halt eine case anweisung ganz oben ;)
switch($_GET['p']) { case 'home': $titel = "Startseite"; break; case 'gb': $titel = "Gästebuch"; break; } // und dann halt beim Titel: <title>PhilippKern.at.gg - <?php echo $titel;?> - by Philipp KERN</title>
MfG
.i -
Also was ein "assoziatives Array" ist weiß ich jetzt nicht aber, das hab ich mir auch schon gedacht. Also für den Pagetitle das übergebene "p" zu nehmen, aber das ist nicht so gut da ich zB Home haben will aber die Datei heißt aber home.
siehe:
http://de.wikipedia.org/wiki/Assoziatives_Array -
machst halt eine case anweisung ganz oben ;)
switch($_GET['p']) { case 'home': $titel = "Startseite"; break; case 'gb': $titel = "Gästebuch"; break; } // und dann halt beim Titel: <title>PhilippKern.at.gg - <?php echo $titel;?> - by Philipp KERN</title>
MfG
.i
Denke das ist die sinnvollste Idee. (Die ich auch verstehe^^)
sesch schrieb:
Also was ein 'assoziatives Array' ist weiß ich jetzt nicht aber, das hab ich mir auch schon gedacht. Also für den Pagetitle das übergebene 'p' zu nehmen, aber das ist nicht so gut da ich zB Home haben will aber die Datei heißt aber home.
siehe:
http://de.wikipedia.org/wiki/Assoziatives_Array
Hab ich auch schon gefunden, danke. -
Jungs, ich weiß ja nicht was ihr hier produzieren wollt, aber so wie es aussieht wird es eine herrliche Page-Injection Seite. D.h. jeder x-beliebige User kann Dateien (inkl. Passwortdateien) auslesen lassen indem er die Datei per URL Parameter übergibt.
switch case ist schonmal eine gute Lösung, doch bitte ändert den Quelltext dahingehend, dass der User einen Namen angebeben muß und dann über das switch case die inklude-Variable und der Seitentitel gesetzt wird.
Das sieht dann folgendermaßen aus:
<? switch($_GET['p']) { case 'home': $inc = 'home.php'; $seitentitel = 'Startseite'; break; case 'gb': $inc = 'gbook.php'; $seitentitel = 'Gästebuch'; break; default: $inc = 'home.php'; $seitentitel = 'Startseite'; } // beliebiger Quelltext // ... include_once($_SERVER['DOCUMENT_ROOT']."/unterverzeichnis/".$inc); // beliebiger Quelltext // ... ?>
Damit ist dann Page-Injection unmöglich geworden, weil wenn der Nutzer einen nicht von dir vorgegeben Namen (Dateiname/Verzeichnis) angibt, automatisch der Defaultwert (home.php) gesetzt wird. Es wird also zum Bsp. keine Passwortdatei inkludiert
Grüßle Scout -
Jungs, ich weiß ja nicht was ihr hier produzieren wollt, aber so wie es aussieht wird es eine herrliche Page-Injection Seite. D.h. jeder x-beliebige User kann Dateien (inkl. Passwortdateien) auslesen lassen indem er die Datei per URL Parameter übergibt.
switch case ist schonmal eine gute Lösung, doch bitte ändert den Quelltext dahingehend, dass der User einen Namen angebeben muß und dann über das switch case die inklude-Variable und der Seitentitel gesetzt wird.
Das sieht dann folgendermaßen aus:
<? switch($_GET['p']) { case 'home': $inc = 'home.php'; $seitentitel = 'Startseite'; break; case 'gb': $inc = 'gbook.php'; $seitentitel = 'Gästebuch'; break; default: $inc = 'home.php'; $seitentitel = 'Startseite'; } // beliebiger Quelltext // ... include_once($_SERVER['DOCUMENT_ROOT']."/unterverzeichnis/".$inc); // beliebiger Quelltext // ... ?>
Damit ist dann Page-Injection unmöglich geworden, weil wenn der Nutzer einen nicht von dir vorgegeben Namen (Dateiname/Verzeichnis) angibt, automatisch der Defaultwert (home.php) gesetzt wird. Es wird also zum Bsp. keine Passwortdatei inkludiert
Grüßle Scout
Stimmt, du hast recht.
Aber das Unterverzeichnis "pages" ist mir .htaccess geschütz, also wenn man es aufruft dan wird man auf eine 403-seite weitergeleitet (
Order allow,deny
deny from all
ErrorDocument 403 http://localhost/KernPhilipp/hp/?p=403
).
Kann man aber trotzdem übergehen, aber man kann nur *.inc-Datein includieren die im pages-Verzeichnis liegen. Hab ich zB eine Datei mir PWs dann bekommt sie einfach die Endung php und man kann sie nicht mehr auslesen, oder??
Edit: HAb mir dein Script noch mal durch den Kopf gehen lassen und bin zu dem Entschluss gekommen diese Variante zu wählen, dann gibt es auch kein Warning wenn der User einen falschen Dateinamen angibt.
Beitrag geändert: 12.10.2007 15:22:28 von philippkern -
Ja ich geb ja zu, dass es nicht unbedingt ganz leicht ist in deinem Fall auf PW-Dateien zuzugreifen. Weil hier aber auch diverse PHP Neulinge im Forum sind, passiert es dann schonmal schnell, dass bei diesen kein ".php" dahinter steht. Nebenbei gesagt, wenn das PHP nicht dahinter stehen würde kann man sogar munter Verzeichniswechsel durchführen ...mit einer .htaccess Datei ist es also nicht unbedingt getan.
Wie dem auch sei - vertraut bitte keinen Nutzereingaben bzw. URL-Werten usw.
Klar kann jeder sein eigenes Ding machen, aber warum erst "falsch" machen, wenn man es mit wenig Handgriffen gleich richtig machen kann
Grüßle
Edit:
Auch PHP Dateien können gelesen werden. Dazu gibt man als Parameter-Wert einfach ein spezielles Script was auf einem eigenen Server liegt an. Dieses Script wird dann in deinem include() inkludiert und ausgeführt... je nachdem wie gut das Script ist kann man recht schicke Sachen machen. Das Beste was ich bisher gesehen habe, war ein kompletter Dateimanager
Beitrag geändert: 12.10.2007 15:50:03 von scout -
Ja ich geb ja zu, dass es nicht unbedingt ganz leicht ist in deinem Fall auf PW-Dateien zuzugreifen. Weil hier aber auch diverse PHP Neulinge im Forum sind, passiert es dann schonmal schnell, dass bei diesen kein ".php" dahinter steht. Nebenbei gesagt, wenn das PHP nicht dahinter stehen würde kann man sogar munter Verzeichniswechsel durchführen ...mit einer .htaccess Datei ist es also nicht unbedingt getan.
Wie dem auch sei - vertraut bitte keinen Nutzereingaben bzw. URL-Werten usw.
Klar kann jeder sein eigenes Ding machen, aber warum erst "falsch" machen, wenn man es mit wenig Handgriffen gleich richtig machen kann
Grüßle
Edit:
Auch PHP Dateien können gelesen werden. Dazu gibt man als Parameter-Wert einfach ein spezielles Script was auf einem eigenen Server liegt an. Dieses Script wird dann in deinem include() inkludiert und ausgeführt... je nachdem wie gut das Script ist kann man recht schicke Sachen machen. Das Beste was ich bisher gesehen habe, war ein kompletter Dateimanager
Beitrag geändert: 12.10.2007 15:50:03 von scout
Also ist es jetzt nicht sicher?!
-
ja weil der nutzer angeben kann was er möchte, aber trotzdem nur eine von dir deffinierte Aktion ausgeführt wird. also die default seite aufgerufen wird.
grüßle -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage