anzeige

php page - style aus html - inhalt aus txt


Seite: 1 2 3 4 5 6 7
Autor Beitrag
Teegee
20.01.09 - 20:53:19 Uhr

Moin zusammen.

Ich bräuchte hilfe bei nem simplen php Dokument, welches den Style und die Gliederung aus HTML einliest (evtl direkt in die php datei einbinden) und dann den zentralen Text der Seite / den eigentlichen Inhalt, aus einer externen (z.B.) html oder txt datei einliest und dann dies als eine Seite rausgibt.

Könnt ihr mir da helfen?

Bin net der grosse php künstler.
Abgemeldet
20.01.09 - 21:12:31 Uhr

Wie genau das ganze laufen soll, kannst du selber entscheiden. Einbinden tut man so:


  1. <?php  
  2.  
  3. include "datei.html";  
  4.  
  5. ?>  



Die Endung dabei ist egal. Du kannst auch aussenrum noch anderen Code schreiben.
Teegee
20.01.09 - 21:21:40 Uhr

soviel konnte ich abschätzen.

aber wie gestalte ich ein php dokument mit dem titel index.php mit dem dazugehörigen layout (html) und so dass wenn ich jetzt index.php?page=main aufrufe dass mir der Inhalt von main geladen wird, bei index.php?page=impressum dann das impressumsinhalt etc.

aber das eigentliche design nur aus einer datei geholt wird.
Abgemeldet
20.01.09 - 21:37:33 Uhr

Also, du machst eine php Datei, in die kommt alles ausser dem eingebundenen Text;

  1. blablablubb header und so  
  2.  
  3. <?php  
  4.  
  5. if(is_file($_GET['page'])) {  
  6.   include $_GET['page'] . ".html";  
  7. }  
  8.  
  9. ?>  
  10.  
  11. und der footer und rest usw ...  


Dabei wird bei ?page=asf die Datei asf.html included.

Die Überprüfung mit is_file sorgt dafür, dass keine Fehler ausgelöst werden und keine externen Dateien eingebunden werden (Sicherheit).
Teegee
20.01.09 - 21:45:04 Uhr

habs noch minim ergänzt bekommen von gunni

  1. <?php  
  2. if(is_file($_GET['page']))  
  3. {    include ($_GET['page'] . ".html");  }  
  4. else {include("datei.html");  
  5. }  
  6. ?>  


danke euch allen
feuerfuchs
20.01.09 - 22:27:06 Uhr

Scheiße... mein alter Post ist weg... deswegen Schnellfassung.

Der Code oben gefällt mir so nicht. Du hast zwar ein bisschen Schutz durch das is_file(), aber es ist trotzdem besser, grundsätzlich kein Vertrauen in Variablen aus GPC zu haben. Deswegen in einem Array die Zuordnung von GET-Parameter zu Datei machen. (an dieser Stelle hatte ich einen schönen Quellcodeschnipsel...)
Desweiteren würde ich empfehlen, statt include() einfach file_get_contents() zu benutzen, wenn du auf den Seiten ohnehin kein PHP benutzen willst - schneller und sicherer.

_________
Benutzt den Pytal-Chat!
PyFix
RSS-Feed
SammysHP
20.01.09 - 22:39:20 Uhr

Bei mir läuft das alles über XML und simplexml und in den XML-Dateien ist sogar noch php-Code

Aber hat ja jetzt nichts mit dem Thema zu tun.


Ich frage mich trotzdem, wo genau jetzt die Sicherheitslücke ist, denn in etwa genauso habe ich es umgesetzt...

  1. <?php  
  2. $page = isset($_GET['page']) ? $_GET['page'] : 'index';  
  3.  
  4. if(file_exists('./unterverzeichnis/'.$page.'.seitentyp.xml')) {  
  5. $pagexml simplexml_load_file('./unterverzeichnis/'.$page.'.seitentyp.xml');  
  6. ?>  


Das Unterverzeichnis selbst ist mit "Deny from all" geschützt. Kann man über die Variable Code einschleusen? Und wenn ja, wie sollte ich die am besten filtern? .. ist schonmal uninteressant, weil die Dateiendung ja einmalig ist.
Abgemeldet
20.01.09 - 22:55:04 Uhr

Eine direkte Gefahr geht auf jeden Fall nicht aus. Es könnte allerdings was passieren. Du musst dir nur mal vorstellen, dass auch Config Dateien eingebunden werden können, sowie jedliche Art von Textdateien, z.B. die .htaccess.

Filtern ?

Die ganzen Dateien in ein Unterverzeichniss zu packen und dann den Zugriff auf dieses Verzeichniss zu beschränken (".." verhindern) sollte reichen.


  1. <?php   
  2. $page = isset($_GET['page']) ? str_replace('..'''$_GET['page']) : 'index';    
  3. ?>  


Ich muss allerdings feuerfuchs zustimmen, wenn die Seite eh nur statisch ist, machen nicht-php-Dateien mehr Sinn, ?page=asdf nur wegen dem Coolness-Faktor ist lächerlich.
SammysHP
20.01.09 - 23:01:02 Uhr

Andere Dateien vom Server können ja nicht eingelesen werden, außer sie haben die Dateiendung ".seitentyp.xml". Außerdem würde simplexml mit einem php-Fehler abbrechen, wenn es keine xml-Datei ist (ich weiß, unschön gelöst mit dem php-Fehler, sollte aber eh nicht auftreten).

Die ".." rauszufiltern werde ich ergänzen. Hatte ich aufgrund der oben genannten Punkte nicht für so wichtig gehalten

Zitat:
Ich muss allerdings feuerfuchs zustimmen, wenn die Seite eh nur statisch ist, machen nicht-php-Dateien mehr Sinn, ?page=asdf nur wegen dem Coolness-Faktor ist lächerlich.
Da braucht man doch noch nicht einmal php, mod_rewrite reicht doch schon


//edit: OMG! Das überprüfe ich doch schon mit htaccess direkt beim Query [a-zA-Z0-9_]
Abgemeldet
20.01.09 - 23:09:53 Uhr

Man weiß nie, ob eine Endung reicht, wegen Nullbyte und so. Und ich weiß auch nicht, was passiert, wenn man einen Hash anhängt (okay, das geht nur ohne is_file, aber trotzdem :P).

Und nein, du überprüfst das noch nicht mit der htaccess. Man kann die Datei immernoch direkt aufrufen.
Seite: 1 2 3 4 5 6 7

- Obige Beiträge stellen keine Äußerung oder Meinung von Pytal oder dessen Betreiber dar -