PHP: INCLUDE zum dynamischen Einfügen von Inhalten

Dieses Thema PHP: INCLUDE zum dynamischen Einfügen von Inhalten im Forum "Webentwicklung, Hosting & Programmierung" wurde erstellt von Ace_NoOne, 13. Apr. 2007.

Thema: PHP: INCLUDE zum dynamischen Einfügen von Inhalten Hallo zusammen, als relativer PHP-Neuling benötige ich etwas Rat in Bezug auf die Verwendung von INCLUDE: Meine...

  1. Hallo zusammen,

    als relativer PHP-Neuling benötige ich etwas Rat in Bezug auf die Verwendung von INCLUDE:

    Meine Website besteht aus den üblichen Modulen: Header, Nav-Menü, Hauptbereich und Footer. Nur der Hauptbereich ändert sich, alles andere bleibt immer gleich.
    Nun habe ich mir überlegt, die jeweiligen Inhalte des Hauptbereiches in separaten Dateien zu lagern und diese jeweils per URL-Parameter zu bestimmen. Die entsprechende Inhaltsdatei wird dann per INCLUDE eingefügt.

    Allerdings bin ich mir nicht sicher, ob dies ein sauberer und auch sicherer Weg ist.
    Zwar lagern die Inhaltsdateien in einem separaten Ordner, sodass (hoffentlich) nicht auf Dateien außerhalb dieses Ordners zugegriffen werden kann - aber vielleicht gibt es noch andere Sicherheitslücken, die ich mangels Erfahrung nicht erkennen kann!?

    Hier ist mein bisheriger Code:
    Code:
    	<!-- Content Area -->
    	<div id=content>
    		<?php
    			// settings
    			$contentDir = content;
    			$contentExt = html;
    			$defaultContent = news;
    			// get URL parameter
    			$content = $_GET{content};
    			// check whether parameter is empty
    			if ($content == ) {
    				// set default content
    				$content = $defaultContent;
    			} else {
    				// make sure no parent directory can be accessed
    				$content = str_replace(../, , $content); // DEBUG: not safe? (e.g. ....////) => disallow all slashes?
    			}
    			// check whether respective file exists
    			$contentSource = $contentDir . / . $content. . . $contentExt;
    			if (is_file($contentSource)) {
    				// read content from file
    				include($contentSource);
    			} else {
    				echo Bad parameter: Error reading content source.;
    			}
    		?>
    	</div>
    Für Kommentare und Anregungen wäre ich dankbar!
     
  2. eine frage

    und zwar -> was genau übergibst du mit content???

    $_GET{content} << das hier mein ich ^^
     
  3. Übergeben wird z.B. news; damit wird dann etwa die Datei ./content/news.html (diese enthält natürlich nicht das HTML-Grundgerüst) eingebunden.

    Den Code habe ich mitterweile etwas angepasst, um die Sicherheit zu verbessern:[Korrektur - siehe unten]
     
  4. und mit $_GET['content'] hast du es auch schon einmal probiert oder?
     
  5. Was probiert?

    Vielleicht hatte ich micht nicht klar ausgedrückt:
    Die URL wäre z.B. index.php?content=news, sodass an der Stelle des PHP-Skriptes der Inhalt der entsprechenden Datei (./content/news.html) eingefügt würde - sofern diese im Verzeichnis content exisitert.
     
  6. ja das ist schon klar

    NUR

    anstatt $content = $_GET{content}; versuchs mal mit $content = $_GET['content'];

    im quelltext
     
  7. Oh, sorry - mein Fehler!
    Ich hatte, aus welchem Grunde auch immer, nochmals die alte Version gepostet.
    Hier ist die aktuelle Version:
    Code:
    	<div id=content>
    		<?php
    			// settings
    			$contentDir = content;
    			$contentExt = html;
    			$contentName = news; // default content
    			// get URL parameter (content)
    			if (!empty($_GET[content])) {
    			  $contentName = basename($_GET['content']); // ensures that no directories can be accessed
    			}
    			// check whether respective file exists
    			$contentSource = $contentDir . / . $contentName . . . $contentExt;
    			if (is_file($contentSource)) {
    				// transclude content
    				include($contentSource);
    			} else {
    				echo Bad parameter: Error reading content source.;
    			}
    		?>
    	</div>
    Allerdings macht es meines Wissens keinen Unterschied, ob ich jetzt $_GET{content} oder $_GET[content] benutze...
     
  8. versuchs doch mal mit zwischen ausgaben ... so echos können sehr nützlich sein ^^
     
  9. Habe ich ja getan; der Code funktioniert so.
    Die Frage ist, ob die Verbindung von INCLUDE mit ungefilterter Übernahme eines URL-Parameters eine Sicherheitslücke darstellt. (Wobei der Parameter ja jetzt mit BASENAME gefiltert wird, sodass keine Ober- oder Unterverzeichnisse angesprochen werden können - hoffe ich zumindest...)
     
  10. und wieso fragst du noch wenn du die lösung hast? *lol*

    dann hat sichs ja erledigt und sonst kannst du ja nach einem . oder / im content suchen und falls es das gibt, kommt einfach nichts ^^ zum beispiel

    gruss

    billy
     
Die Seite wird geladen...

PHP: INCLUDE zum dynamischen Einfügen von Inhalten - Ähnliche Themen

Forum Datum
PHP5 mitm Apache unter Debian will keine Dateien Includen ?:-( Windows XP Forum 27. Okt. 2008
include zentrieren Webentwicklung, Hosting & Programmierung 24. Juli 2008
Server Side Include Windows XP Forum 18. Apr. 2007
php include wird nicht ausgeführt Webentwicklung, Hosting & Programmierung 28. Jan. 2007
Word UNC Include.Picture: Laufwerksbuchstabe verschwindet Microsoft Office Suite 4. Jan. 2007