php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger

PHP Einsteiger PHP Problemlösungen für Spracheinsteiger
Archive: 2004, 2004/2, 2005, 2005/2, 2006, 2007, 2008, 2009, 2010,

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 02.05.2011, 16:00  
Neuer Benutzer
 
Registriert seit: 02.05.2011
Beiträge: 25
PHP-Kenntnisse:
Anfänger
Phil7789 befindet sich auf einem aufstrebenden Ast
Standard Sichere Lösung für ?site=XXXX

Hallo,
ich bin auf der Suche nach einem kleinen Schubser in die richtige Richtung bei meinem Problem.
Und zwar würde ich gerne als Anhängsel an eine zentrale Datei (index.php) ?site=XXXX anfügen.

Die Lösung per mod_rewrite + .htaccess ist mir bekannt, allerdings habe ich diese noch nicht selbst getestet und würde gerne erst einmal davon absehen. Im Detail möchte ich das Anhängsel für die index.php durch das includieren einer functions.php verfügbar machen.

Welche anderen sicheren Lösungen gibt es noch für dieses Problem? Bisher habe ich es über eine Konstante per define und einer Switch-Case Abfrage realisiert.
PHP-Code:
define("site", isset($_GET['site]')? $_GET['site'] : 'seite1');
switch(
site) {
case 
'seite1':
   
$title Hier steht der Seitentitel;
   
$include = ('seite_01.php');
break;
case 
'seite2':
    
$title = ...

In euren Tipps 2008 habe ich eine kleine Diskussion zu diesem bzw. zu einem ähnlichen Thema gefunden in der gesagt wurde es wäre unsicher in der Include Angabe . und / zu verwenden, ergo keine Angabe wie
PHP-Code:
$include = ('../seite_01.php');

// oder

$include = ('./seite_01.php'); 
Wäre hier ein Array sinnvoller, das überprüft welche Dateinamen in welchem Pfad zulässig sind? Und liese sich das auf die index.php beschränken, sodass beim Aufruf von forum.php?site= ... eine Fehlermeldung oder gar kein Ergebnis kommt? (vorausgesetzt beide Dateien includieren dieselben Einstellungen).

Wenn ich sowas

Schonmal vielen Dank im Voraus,

Phil

EDIT: Um Multiposting Vorwürfen entgegenzutreten: Der Thread existiert so ähnlich hier. Warum ich hier nochmal schreibe? Weil mir dieses Forum mehr zusagt und ich bereits die Accountlöschung im anderen Forum beantragt habe. Zeitlich evtl. etwas unglücklich gelaufen, aber ich beschränke mich ausschließlich auf dieses Forum für weitere Beiträge.

Geändert von Phil7789 (03.05.2011 um 08:00 Uhr).
Phil7789 ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 02.05.2011, 16:02  
Erfahrener Benutzer
 
Registriert seit: 22.03.2009
Beiträge: 109
PHP-Kenntnisse:
Fortgeschritten
tarian befindet sich auf einem aufstrebenden Ast
Standard

Das include mit . oder / unsicher ist ist mir nicht bekannt und ich zweifel es einfach mal an. Schau dir mal Frontcontroller & MVC Pattern an.

Geändert von tarian (02.05.2011 um 16:05 Uhr).
tarian ist offline   Mit Zitat antworten
Alt 02.05.2011, 16:04  
Moderator
 
Benutzerbild von cycap
 
Registriert seit: 13.02.2008
Beiträge: 6.816
PHP-Kenntnisse:
Fortgeschritten
cycap ist einfach richtig nettcycap ist einfach richtig nettcycap ist einfach richtig nettcycap ist einfach richtig nettcycap ist einfach richtig nett
Standard

Zitat:
Wäre hier ein Array sinnvoller, das überprüft welche Dateinamen in welchem Pfad zulässig sind?
Sowas in die Richtung ist definitiv sinnvoller. Du kannst auch deine Seiten durchnummerieren (o.ä.):

PHP-Code:
$sites[0] = "news.php";
$sites[1] = "about.php";
$sites[2] = "impressum.php";
include(
$sites[(int)$_GET['site']]); 
cycap ist offline   Mit Zitat antworten
Alt 02.05.2011, 16:07  
Moderator
 
Benutzerbild von cycap
 
Registriert seit: 13.02.2008
Beiträge: 6.816
PHP-Kenntnisse:
Fortgeschritten
cycap ist einfach richtig nettcycap ist einfach richtig nettcycap ist einfach richtig nettcycap ist einfach richtig nettcycap ist einfach richtig nett
Standard

Zitat:
Und liese sich das auf die index.php beschränken, sodass beim Aufruf von forum.php?site= ... eine Fehlermeldung oder gar kein Ergebnis kommt? (vorausgesetzt beide Dateien includieren dieselben Einstellungen).
Um den Direktaufruf von PHP-Scripten zu vermeiden stellt man diese normalerweise außerhalb des Document-Roots. Kann man dies aus irgendwelchen Gründen nicht, so erstellt man eine Konstante in der index.php und muss diese in jeder einzelnen PHP-Datei Abfragen und ggf. die Verarbeitung abbrechen.
cycap ist offline   Mit Zitat antworten
Alt 02.05.2011, 16:09  
Neuer Benutzer
 
Registriert seit: 02.05.2011
Beiträge: 25
PHP-Kenntnisse:
Anfänger
Phil7789 befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von tarian Beitrag anzeigen
Das include mit . oder / unsicher ist ist mir nicht bekannt und ich zweifel es einfach mal an. Schau dir mal Frontcontroller & MVC Pattern an.
Ich beziehe mich da auf diesen Thread http://www.php.de/php-tipps-2008/462...unktion-4.html (GET-Funktion)

Vielleicht habe ich da was falsch verstanden ^^

Wegen dem mod_rewrite: Ich werde mir das auf jedenfall mal anschauen und damit spielen, würde aber auch gerne die Alternativmöglichkeit die ich oben genannt habe lernen / können.

Vielen Dank schonmal für die Tipps, bin für weitere natürlich offen und werd erst nochmal basteln

MfG Phil
Phil7789 ist offline   Mit Zitat antworten
Alt 02.05.2011, 16:20  
Erfahrener Benutzer
 
Registriert seit: 01.09.2010
Beiträge: 4.561
PHP-Kenntnisse:
Fortgeschritten
eagle275 ist ein sehr geschätzer Menscheagle275 ist ein sehr geschätzer Menscheagle275 ist ein sehr geschätzer Mensch
Standard

ohne das jetzt durchgelesen zu haben .. ich glaub das mit . und / bezog sich darauf, wenn du per Get-Parameter den exakten Pfad und Dateinamen des Zielscripts angibst - das wäre natürlich in der Tat um jeden Preis zu verhindern -. aber genau aus diesem Grund machst du ja das Array

dann brauchst du als Get-Parameter nur noch den Array-Key zu übergeben, über den du dann im Array den exakten Pfad + Dateinamen erhältst.

Vorteile dabei :
- nicht vorhandene Array-Schlüssel lassen sich gut erkennen (die sind ja im Array nicht enthalten) und entsprechend abfangen - im Gegensatz zu undefinierten 404 Meldungen beim Aufruf einer nicht vorhandenen Script / Html-Seite
- die exakte Struktur deiner Seite wird nicht offensichtlich gleich als Get-Parameter angezeigt (der steht ja dann gleich in der URL in der Adresszeile mit drin)
- Vermeidung problematischer Zeichen ( Leerzeichen, Punkt, Slash und so weiter, die alle URL-konvertiert würden ... )
- leichte Erweiterung -> einfach neues Array-Element erzeugen für deine neue COntent-Seite und gut ist
- die URL bleibt kurz und damit offen für weitere Parameter ...
- und sicher noch weitere
__________________
"Irren ist männlich", sprach der Igel und stieg von der Drahtbürste
eagle275 ist offline   Mit Zitat antworten
Alt 02.05.2011, 16:48  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.987
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard

Zitat:
Die Lösung per mod_rewrite + .htaccess ist mir bekannt, allerdings habe ich diese noch nicht selbst getestet und würde gerne erst einmal davon absehen. Im Detail möchte ich das Anhängsel für die index.php durch das includieren einer functions.php verfügbar machen.
Wiedermal 2 Sachen in einen Topf geworfen:
1. Umleiten von Anfragen auf GET-Parameterisierung
2. Ansprechen der durch GET-Parameter repräsentierten Inhalte.

http://www.php.de/php-tipps-2008/133....html#post9744 ([Erledigt] Allgemeine Frage)
http://www.php.de/php-tipps-2008/482...tml#post373422 ([Erledigt] Mehrfachlink mit PHP)

Zitat:
Das[s] include mit . oder / unsicher ist ist mir nicht bekannt
Dann hast Du eine Bildungslücke.
__________________
--
One pixel is still too big. Please make it smaller. ASAP.

Initiative Mittelstand.
Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers.
--
nikosch ist offline   Mit Zitat antworten
Alt 02.05.2011, 17:54  
Moderator
 
Benutzerbild von Chriz
 
Registriert seit: 11.05.2008
Beiträge: 6.267
Chriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer AnblickChriz ist ein wunderbarer Anblick
Standard

Hallo,

du musst eine Anfrage zunächst auf gültige Werte beschränken. Am einfachsten ist es, wenn du zunächst den Parameter "site" inhaltlich auf Validität prüfst. Hierzu kannst du eine Liste erlaubter Zeichen verwenden, die keinen Angriff erlauben, z.B. Beschränkung auf das ABC, Zahlen, den Binde- und Unterstrich:

PHP-Code:
<?php
if (!isset($_GET["site"])) {
  
// error: site nicht definiert
}
if (!
is_string($_GET["site"])) {
  
// error: site kein String, z.B. Array bei site[] = x
}
if (!
preg_match("/^[a-z0-9_-]+$/"$_GET["site"])) {
  
// error: ungültige Zeichen, z.B. site=../db-config.inc.php
}
?>
Damit wäre das Gröbste abgewehrt. Wenn du nun einen Ordner hast, in dem deine Views/Template-Skripte liegen, kannst du die Anfrage auch auf existierende Dateien einschränken:

PHP-Code:
<?php
$templatePath 
realpath(dirname(__FILE__) . "/views");
$templateFile $templatePath "/" $_GET["site"] . ".php";
if (!
is_file($templateFile)) {
  
// error: Template existiert nicht, z.B. site=gibtsnicht
}
if (
$templatePath != realpath(dirname($templateFile))) { // ungeprüfter Code
  // error: Template liegt nicht im definierten Templateverzeichnis, sollte
  // durch die vorherigen Prüfungen allerdings schon ausgeschlossen sein
}
include 
$templateFile;
?>
__________________
"Nuschel ich?" - "Was?"
Chriz ist offline   Mit Zitat antworten
Alt 02.05.2011, 18:22  
Neuer Benutzer
 
Registriert seit: 02.05.2011
Beiträge: 25
PHP-Kenntnisse:
Anfänger
Phil7789 befindet sich auf einem aufstrebenden Ast
Standard

Klasse, danke für die vielen Antworten. Werde mich nochmal ransetzen und die verschiedenen Tipps durcharbeiten.

Super Foru, hier kriegt man richtig geholfen

Danke euch,
Phil
Phil7789 ist offline   Mit Zitat antworten
Alt 02.05.2011, 21:56  
Moderator und Wett-König
 
Benutzerbild von dr.e.
 
Registriert seit: 21.05.2008
Beiträge: 3.654
PHP-Kenntnisse:
Fortgeschritten
dr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblick
dr.e. eine Nachricht über Skype™ schicken
Standard

Der Vollständigkeit halber noch der Lösungsansatz aus einem anderen Forum...
__________________
Viele Grüße,
Dr.E.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1. Think about software design before you start to write code!
2. Discuss and review it together with experts!
3. Choose good tools (-> Adventure PHP Framework (APF))!
4. Write clean and reusable software only!
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
dr.e. ist offline   Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
[Erledigt] Beste Lösung für Nummerierung einer Rangliste? comlar Datenbanken 17 10.11.2010 19:46
Scriptsuche Cam Live Streaming Lösung Abakay Scriptbörse 0 26.10.2010 20:49
[Erledigt] echo $$variabel, andere Lösung gesucht sign PHP Tipps 2009 6 14.11.2009 16:05
[Erledigt] Video Portal Lösung exite Scriptbörse 3 23.09.2009 11:14
Link nach 3. falscher Lösung anzeigen Cujo PHP Tipps 2009 4 10.09.2009 14:50
Liste, select rqand PHP Tipps 2009 4 06.06.2009 13:12
Suche eine Lösung (OCR oder Captcha-Breaker) um Texte auf Buttons zu erkenen djager Beitragsarchiv 1 23.02.2009 15:10
Backup bzw. Abbild Lösung phpdummi Off-Topic Diskussionen 7 17.07.2007 22:02
Andere Lösung für verschachtelte Mysql Anfrage Goschy PHP Tipps 2007 8 27.03.2007 21:47
endlich gute lösung für safe_mode probleme. viel spass. ;) Promaetheus PHP Tipps 2006 7 09.11.2006 17:45
[Erledigt] suche Lösung für logisches Problem bei Datenbankabfrage Datenbanken 10 25.01.2006 13:28
php scripe offline testen die einfachste lösung gesucht Newsscript PHP Tipps 2006 3 17.01.2006 13:34
one-click-unsubscribe Lösung mit PHP PHP Tipps 2007 7 07.11.2005 18:26
Sichere Vebindung mit MySQL & .htaccess erstellen + Vars PHP Tipps 2005 8 17.03.2005 16:56

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
<?php if (is_file(templatepath, /xxxx php, eine sichere lösung des problems, $_get[\site\], php is_file unsicher?, $_get[\'site\']);, php direktaufruf realpath

Alle Zeitangaben in WEZ +2. Es ist jetzt 15:43 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum