Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   PHP Problem (https://www.delphipraxis.net/84779-php-problem.html)

abc newbee 21. Jan 2007 19:49


PHP Problem
 
Hi!

Es ist mit PHP ja möglich Parameter mit der URL zu übergeben. In meinem Fall leite ich den Besucher je nach Parameter an die richtige Datei weiter. Nur was mache ich, wenn keine Parameter übergeben werden?
Also www.meine-domain.de/index.php statt www.meine-domain.de/index.php?page=start.html

Wenn also kein Parameter übergeben wurde soll trotzdem zu einer bestimmten URL weitergeleitet werden. Und wenn ein falscher Parameter übergeben wurde (z.B. nicht existierende Datei) soll zu einer anderen bestimmten Seite weitergeleitet werden.

Eichhoernchen 21. Jan 2007 19:54

Re: PHP Problem
 
Für sowas kannst du isset und fileexistis benutzen


Code:
if( !isset($_GET['varname']) )
{
 //KEIN PARAMETER ANGEGEBEN
}
else
{
//VERARBEITE PARAMETER in $_GET['varname']
//z.b. prüfen ob if(FileExists()) etc...
}

Flare 21. Jan 2007 19:56

Re: PHP Problem
 
Code:
if ($_GET['page']=='') {
  header('Location: 'index.php?page=start.html');
}
bzw. kürzer:
Code:
switch ($_GET['page']) {
  case 'start.html': include 'start.html'; break;
  case 'login.html': include 'login.html'; break;
  // ...
  default: include 'start.html';
}

Flare

mkinzler 21. Jan 2007 20:06

Re: PHP Problem
 
Man sollte vorher auf das Vorhandensein des Parameters Testen:

Code:
if( isset( $_GET['page']))

abc newbee 21. Jan 2007 20:07

Re: PHP Problem
 
Also ich hab das jetzt (schon vor meiner Frage) so gemacht

Code:
<?php

  $page=$_GET['page'];

  if(file_exists('pages/'.$page.'')==false)
  {
    if($page=="")
    {
    echo '<frame src="templates/default/main.php?page=start.html" name="content" noresize>';
    }
    else
    {
    echo '<frame src="templates/default/main.php?page=error.html" name="content" noresize>';
    }
  }
  else
  {
  echo '<frame src="templates/default/main.php?page='.$page.'" name="content" noresize>';
  }

?>
Also das letzte was ich da mache funktioniert... Es wird also wenn ich ein Parameter angebe richtig weitergeleitet... Bei einem falschen oder keinem Parameter funktioniert es nicht richtig...

mkinzler 21. Jan 2007 20:13

Re: PHP Problem
 
Kombiniere doch die Antworten

abc newbee 21. Jan 2007 20:24

Re: PHP Problem
 
ich hab jetzt folgendes kombiniert:

Code:
<?php

if( !isset($_GET['page']) )
{
echo '<frame src="templates/default/main.php?page=start.html" name="content" noresize>';
}
else
{
if(file_exists('pages/'.$page.'')==true)
{
echo '<frame src="templates/default/main.php?page='.$page.'" name="content" noresize>';
}
else
{
echo '<frame src="templates/default/main.php?page=error.html" name="content" noresize>';
}
}

?>
Nur das Problem: Jetzt funktioniert es nurnoch ohne Parameter aber sonst nicht mehr.

Flare 21. Jan 2007 20:53

Re: PHP Problem
 
Du hast ja auch die Zeile
Code:
$page = $_GET['page'];
rausgenommen! :roll:


Flare

BUG 21. Jan 2007 22:52

Re: PHP Problem
 
:shock: Es sollten nie Seiten/Dateien aus Parametern direkt aufgerufen werden,
lieber nochmal die Gültigkeit überprüfen (zB: durch eine DB) , sonst :arrow: Riesensicherheitlücke :!:
(Pishing, Cross-Site-Scripting, ...)

Wäre ein CMS (Content Management System, zB: Contenido) denn eine Alternative?

Bug

Eichhoernchen 21. Jan 2007 23:42

Re: PHP Problem
 
Code:
<?php

if( !isset($_GET['page']) )
{
  echo '<frame src="templates/default/main.php?page=start.html" name="content" noresize>';
}
else
{
  $page = $_GET['page']; //Das hier ist neu
  if(file_exists('pages/'.$page)) //siehe unten, und ein weiterer Vergleich mit true ist unnötig
  {
    echo '<frame src="templates/default/main.php?page='.$page.'" name="content" noresize>';
  }
  else
  {
    echo '<frame src="templates/default/main.php?page=error.html" name="content" noresize>';
  }
}

?>
So sollte es dann klappen, du brauchst übrigens um einen String zu verketten am Ende nicht noch ein . ''
Also:
Code:
'pages/' . $page . ''
ist das selbe wie:
Code:
'pages/' . $page

alcaeus 22. Jan 2007 00:06

Re: PHP Problem
 
Zitat:

Zitat von BUG
:shock: Es sollten nie Seiten/Dateien aus Parametern direkt aufgerufen werden,
lieber nochmal die Gültigkeit überprüfen (zB: durch eine DB) , sonst :arrow: Riesensicherheitlücke :!:
(Pishing, Cross-Site-Scripting, ...)

So ist es. Ausserdem, wenn es nicht unbedingt mit Frames gemacht werden muss, kannst du das Schlimmste auch sehr einfach verhindern: verwende einfach include(). Wenn dein Provider nicht bescheuert ist, hat er entweder safe_mode mit einer open_basedir-Restriction an, oder mindestens allow_url_fopen aus. Damit koennen keine Remote-Dateien gelesen werden. Gescheiter ist das: Anstatt
Code:
if(file_exists('pages/'.$page))
zu schreiben, schreibst du:
Code:
if (preg_match('#^[a-z0-9\-_]+\.html$#i', $page) && file_exists('pages/'. $page))
Damit muss ein Dateiname mit mindestens einem Alphanumerischen Zeichen sowie - oder _ beginnen, und mit ".html" enden. Sonst koennte jemand auch /etc/passwd auslesen, und das waere leicht besch*.

Greetz
alcaeus

faux 22. Jan 2007 00:12

Re: PHP Problem
 
Zitat:

Zitat von BUG
:shock: Es sollten nie Seiten/Dateien aus Parametern direkt aufgerufen werden,
lieber nochmal die Gültigkeit überprüfen (zB: durch eine DB) , sonst :arrow: Riesensicherheitlücke :!:

Würde er das ganze per include, readfile oä. lösen, würde ich zustimmen, da so wirklich jede Datei auf dem Server, die passende Leserechte hat, ausgelesen werden kann; er benutzt jedoch Frames, da ist es doch egal ob er das Ergebnis "auswertet", wenn das Skript die Seite nicht anzeigt, ruft der "Angreifer" sie eben direkt auf.
btw: Ich würde es auch nicht direkt ausgeben, zumindest basename() oä. sollte benutzt werden.

Grüße
Faux

RWarnecke 22. Jan 2007 07:06

Re: PHP Problem
 
Hi,

mal eine dumme Frage, sind Frames nicht out ? Ich bin doch der Meinung, dass die meisten Seiten aus Templates, Tabellen oder Flash bestehen. Ich würde das ganze über Templates lösen und lediglich nur eine Zahl oder ein Wort als Parameter übergeben. So können keine Rückschlüsse auf eventuelle Dateien auf dem Server gemacht werden.

Eine gute Template-Engine ist zum Beispiel Smarty.

mkinzler 22. Jan 2007 07:42

Re: PHP Problem
 
Tabellen sind noch mehr out nicht unbedingt die Frames, obwohl man sie auch durch <divs> ersetzten könnte, wobei Frames doch gewisse Vorteile besitzen. Und ob man Seiten mit Hilfe von Templates gestaltet oder nicht hat mit der Verwendung von "veralteter" Tags nichts zu tun.

Eichhoernchen 22. Jan 2007 10:06

Re: PHP Problem
 
Wo ist denn der Vorteil von den ganzem CSS Zeug im Gegensatz zu Tabellen?

mkinzler 22. Jan 2007 10:08

Re: PHP Problem
 
Das man sie besser Positionieren und Stylen kann

Eichhoernchen 22. Jan 2007 11:26

Re: PHP Problem
 
Ja, aber wenn das gar nicht so nötig ist, kann man doch nicht sagen, dass Tabellen schlecht sind.

mkinzler 22. Jan 2007 11:30

Re: PHP Problem
 
Habe ich auch nicht behauptet.

Matze 22. Jan 2007 11:32

Re: PHP Problem
 
Mit css kann man Tabellen auch sehr gut "stylen". Es hat alles Vor und Nachteile. In vielen Fällen finde ich Tabellen einfach übersichtlicher vom Code her, doch da der <div>-Code meist deutlich weniger ist, nehme ich das, so gut es geht. Aber du hast Recht, man kann nicht sagen, dass Tabellen schlecht sind, sie sind für's Layouten nur nicht sonderlich gut geeignet, da man anders etwas flexibler ist.
Tabellen haben den Vorteil, dass jeder Browser damit recht gut klar kommt, <div> kann einen wirklich Nerven kosten, wenn's überall gleich aussehen soll - kann (nicht muss). ;)

faux 22. Jan 2007 17:12

Re: PHP Problem
 
Zitat:

Zitat von Eichhoernchen
Ja, aber wenn das gar nicht so nötig ist, kann man doch nicht sagen, dass Tabellen schlecht sind.

Überschrift "Tabellenloses Design?": http://tevs.nophia.de/


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:24 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz