ERLEDIGT
NEIN
NEIN
ANTWORTEN
5
5
ZUGRIFFE
314
314
EMPFEHLEN
-
Hallo zusammen,
ich habe eine Webseite mit html und php programmiert. Nun war es bislang immer so, dass ich die Seiten wie folgt verlinkt habe:
Ganz oben in der index.php:
In der contentselect.php:PHP-Code:<?php
include("incl/contentselect.php");
if($_GET["c"] < 1){
$inhalt = 0;
}else{
$inhalt = $_GET["c"];
}
?>
Und in der index.php wird dann immer folgendes an die entsprechende Stelle eingefügt:PHP-Code:<?php
$contents = array();
$contents[0] = array("menu", "home");
$contents[1] = array("menu", "wir");
$contents[2] = array("menu", "kontakt");
...
?>
PHP-Code:<? //NAVI Anfang
if(file_exists("content/".$contents[$inhalt][0].".php")){
include("content/".$contents[$inhalt][0].".php");
} //NAVI Ende
?>Nun ergibt sich daraus aber mein Problem, dass in der Domainzeile www.domain.de/?c=1 auftaucht.PHP-Code:<? //Inhalt Anfang
if(file_exists("content/".$contents[$inhalt][1].".php")){
include("content/".$contents[$inhalt][1].".php");
} //Inhalt Ende
?>
Da das nicht so toll aussieht und für diverse Auswertungstools und auch für die Suchmaschine nicht so geeignet ist, hätte ich gern folgende Anzeige: www.domain.de/kontakt.html oder www.domain.de/kontakt.php
Ist das ohne große Probleme jetzt noch möglich? Wenn ja, wie kann ich das realisieren? Oder muss ich alles dafür umstellen?
Grüße,
SuLeu
-
Hi SuLeu,
denke mal mit PHP ist das nicht möglich.
Kennst du mod_rewrite?
Ich glaube das geht in die richtige Richtung.
Gehe mal davon aus dass du Apache benutzt.
Warum eigedlich in diesem Unterforum und nicht bei PHP oder noch besser Hosting & Webbserver?
Gruß
-
Hey,
wie mein Vorredner bereits sagte, musst Du dafuer mod_rewrite benutzten. Das ist bei den meisten Webspace-Anbietern vorinstalliert und kann mittels einer .htaccess-Datei neben der index.php aktiviert werden.
.htaccess
Code :1 2
RewriteEngine On RewriteRule (.*)\.html index.php?c=$1
Dein Code musst du dann lediglich in der Form erweitern, dass $_GET['c'] nun nicht mehr numerisch, sondern ein String ist. Das heisst konkret, dass Du lediglich dein Array '$contents[0]' mit einem anderem Index versehen musst.
//Edit. Da die Unterarrays in $contents nun als zweites Element den gleichen Wert wir der Index selbst hat, kannst Du auch nun einfach ein quasi Whitelist-Array anlegen, das lediglich die Werte in _GET['c'] verifiziert.PHP-Code:<?php
$contents = array();
$contents['home'] = array("menu", "home");
$contents['wir'] = array("menu", "wir");
$contents['kontakt'] = array("menu", "kontakt");
...
?>
Bevor Du dann die controller files laedst, kannst einfach mittelsPHP-Code:$contents = array('home', 'wir', 'kontakt');
den Call verifizieren, so dass ein Angreifer nicht beliebige Files includen kann.PHP-Code:if( !in_array($_GET['c'], $contents) ) die('Invalid page')
Geändert von MArc (09.11.11 um 22:19 Uhr)
Kryn.cms - einfach anders.
"When you're talking about webserver, as it is, with no rules, well then, baby you'd better block every tiny hole of your server!" - MArc (inspired by Bruce L.)
-
Vielen Dank @javaDeveloper2011 und @MArc für eure Antwort.
@javaDeveloper: Irgendwie ist mir der Beitrag ausversehen in dieses Forum gerutscht. Das war keine Absicht. Eigentlich wollte ich es in das Unterforum php reinschreiben. Keine Ahnung ob ich es jetzt noch verschieben kann.. Vielleicht könnte das ein Admin machen?
Ich habe die Variante von MArc ausprobiert, leider funktionierte es nicht so recht. Wahrscheinlich hatte ich was falsch verstanden. Oder die Variante mit der htaccess klappt local nicht (sorry, habe mit htaccess noch nicht viel zu tun gehabt). Es erschien immer nur ein Serverfehler.
Ich habe dann noch mal die halbe Nacht rumgetüftelt und plötzlich kam mir eine Idee:
Die contentselect.php habe ich ganz rausgeschmissen. Dann habe ich jede Seite als php-Datei angelegt (index.php, wir.php, kontakt.php, ...). In die neuen Dateien habe ich dann mein Grundgerüst (inkl. Header) abgespeichert. Dann habe ich auf den Seiten in das Grundgerüst die eigentliche Unterseite immer nur includet:
Damit ich das Menü bei Änderungen nur einmal ändern muss, habe ich es ebenfalls in eine externe PHP-Datei ausgelagert und wird im Grundgerüst ebenfalls includet. Auf allen Unterseiten habe ich dann eine Variable definiert:PHP-Code:<?php //Inhalt
if(file_exists("content/wir.php")){ include("content/wir.php"); }
?>
Und im Menü die Seiten jeweils so verlinkt:PHP-Code:<?php $inhalt = 0; ?>
@MArc: Nun ist nur die Frage ob meine Variante sonderlich sicher ist?PHP-Code:<?php
$aktiv = " id=\"aktiv\"";
?>
<ul class="menuUL">
<li <?php if($inhalt==0){ echo $aktiv; } ?>><a href="index.php">Home</a></li>
<li <?php if($inhalt==1){ echo $aktiv; } ?>><a href="wir.php">Wir ü uns</a></li>
...
</ul>Grüße, SuLeu...so dass ein Angreifer nicht beliebige Files includen kann.
-
Hey,
also bezueglich mod_rewrite ist das vermutlich so, dass Du local das Apache-Modul nicht aktiviert hast. Benutzt du Xampp? Wenn ja, hier entlang: http://www.driefmeier.de/artikel/mod...pp-aktivieren/
Was fuer eine Fehlermeldung erscheint? In der error_log findest Du hinweise, ob ich vielleicht ein Typo in dem Snippet habe oder ob lediglich das Modul nicht aktiviert ist.
Was die Sicherheit deines jetzigen design pattern angeht, kann ich nur sagen, dass die so vermutlich schon gegeben ist. Die Tatsache, dass allerdings '.php' nun an jeder URL haengt, finde ich persoenlich nicht so schick. Ich persoenlich praeferiere URLs, die dynamischen Content werfen, ohne File-Extension. Sprich:
Das allerdings funktioniert nur mit mod_rewrite. Generell finde ich es vom design pattern her angenehmer, wenn jeder Request durch ein controller file geht, anstatt nun jede URL seine eigene Datei hat.Code :1 2 3 4
http://<domain>/wir http://<domain>/kontakt http://<domain>/produkte http://<domain>/produkte/bla1
Gibt es ein Grund, wieso Du kein CMS, das dir diese Arbeit erspart, einsetzt?
GruesseGeändert von MArc (10.11.11 um 10:28 Uhr)
Kryn.cms - einfach anders.
"When you're talking about webserver, as it is, with no rules, well then, baby you'd better block every tiny hole of your server!" - MArc (inspired by Bruce L.)
-
Netiquette (vA §15) und Nutzungsregeln (vA §4.8) einhalten! Programmcode in Codetags/Codeboxen.
Sehr gute Beiträge bitte Bewerten (Stern darunter oder "Danke").
"Funktioniert nicht" ist zu ungenau! Code, Fehlermeldungen, Verhalten des Programms, ...?
Ähnliche Themen
-
Sed - Ersetzen unbekannter Parameter
Von Asmodaios im Forum Linux & UnixAntworten: 1Letzter Beitrag: 25.09.08, 09:42 -
Problem-Parameter zu Ersetzen
Von technoman im Forum CGI, Perl, Python, Ruby, Power ShellAntworten: 0Letzter Beitrag: 02.05.07, 13:58 -
preg_replace ersetzen und ausschließen von ersetzen
Von son gohan im Forum PHPAntworten: 14Letzter Beitrag: 23.11.06, 20:31 -
Textfeld mit Dropdown füllen und ersetzen (Das Ersetzen ist das Problem)
Von dwex im Forum Javascript & AjaxAntworten: 5Letzter Beitrag: 20.03.06, 13:06 -
Parameter
Von Hellie im Forum Delphi, Kylix, PascalAntworten: 1Letzter Beitrag: 17.06.04, 23:04





Zitieren


Login






[PHP][Snippet] Array zu XML konvertieren