isset var
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
array
bedingung
beispiel
break
browser
code
datei
endung
fehlermeldung
funktion
garnichts
index
ordner
sache
start
switch
url
verzeichnis
weiterleitung
zweig
-
Hi,
ich benutze GET um Pages anzuzeigen beispiel ?site=main.
<? function naviextern() { $p = $_GET["p"]; if(!isset($p)) { $p = "start"; } switch ($p) { #case "": include (""); break; case "start" : include ("inc/content/start.php"); break; case "main" : include ("inc/content/main.php"); break; case "reg" : include ("inc/content/reg.php"); break; } } ?>
ich hab mal in index.php echo $p gemacht um zu sehen ob er wirklich die variable setzt. Tut es auch. Aber mir ist in Browser aufgefallen das man ?p=<b>test<b> machen kann.. und dann wird echo acuh fett "test" angezeigt. Ich weiß net vllt ist das sogar ne Sicherheitslücke ^^ SQL Injection & co.
Wie könnte ich denn abfragen ob, $p gesetzt ist.. und das $p nur start, main und reg als variable haben darf?
Ich mein es soll einfach beispiel bei ?$p=asd gucken ob ob asd unter switch steht.. wenn es nicht existiert, dann soll es Fehlermeldung wie echo "die seite existiert nicht" ausgeben..
Beitrag geändert: 3.12.2008 18:31:18 von bilo -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
<? function naviextern() { $p = $_GET["p"]; if(empty($p)) { $p = "start"; } switch ($p) { case "start" : include ("inc/content/start.php"); break; case "main" : include ("inc/content/main.php"); break; case "reg" : include ("inc/content/reg.php"); break; default: die("Du Hacker!") } } ?>
Der Default Zweig wird genutzt, wenn keines der Auswahlmöglichkeiten stimmt.
Mit Empty kannst du überprüfen, ob eine Variable NICHT existiert, NULL, "" oder 0 enthält. (Also nur das entsprechende enthält ;) )
Beitrag geändert: 3.12.2008 18:36:01 von familie-schiffer -
Danke! Aber du hast ";" vergessen in Zeile 11 :P
Aber aber ein Problem hab ich noch. In index ganz oben hab ich auch
$p = $_GET["p"]; if(empty($p)) { $p = "start"; } echo $p;
Hab ich gemacht. Aber das überprüft ja immernoch nicht das er nur die variablen in switch haben darf und nicht sonst was.
Schon gut. Mir ist unset() nicht eingefallen. Jetzt alles cool :P
<? function naviextern() { $p = $_GET["p"]; if(empty($p)) { $p = "start"; } switch ($p) { case "start" : include ("inc/content/start.php"); break; case "main" : include ("inc/content/main.php"); break; case "reg" : include ("inc/content/reg.php"); break; default: unset($p);die("Du Hacker!"); } } ?>
Beitrag geändert: 3.12.2008 19:16:00 von bilo -
Och ich hab da jetzt stehen die Seite existiert nicht ^^
Naja ich wollte unbedingt das die Variable bei fehlschlag verschwindet. Ich will mich daran gewöhnen damit man nachher schwer ist Sicherheitslücken findet. Was nicht da ist wird auch schwer gefunden zu werden:P
Ich hab beispiel 2 pages.. einer hat so mächtig viele .php wo man sql injection nicht führen kann.. es ist schon 3 jahre her als ich das gemacht habe aber ich weiß auch nicht was ich da gemacht habe damals. Ich kannte damals die SQL-Injection nicht mal. Aber bei den neueren page mit ca. 5 .php Dateien.. kommt Fehlermeldungen.. somit erkennt man, dass es Sicherheitslücken hat :S
Gibs eigentlich ne Möglichkeit ohne javascript weiterleitung zu machen? ich würd besser finden statt zu includen eher weiterleitung zu Seite ?p=start hat. -
oder du machst das ganze so:
<?php // Die Variable inc_array wird als Array() Deklariert $inc_array = array(); // Diese Funktion �ffnet einen Ordner $inc_dir = opendir ("./seiten"); // Der Ordner wird als Array eingelesen while ($inc = readdir ($inc_dir)){ if($inc != "." && $inc != "..") { // Es werden alle .inc.php endungen entfernt und anslie�end als Array zusammengef�gt $short_inc = str_replace(".inc.php", "", $inc); array_push ($inc_array, $short_inc); } } // Das Verzeichnis wird wieder geschlossen closedir($inc_dir); // Es wird die aus der URL die Variale von "?seite=" ausgelesen. if (isset($_GET[seite]) && in_array($_GET[seite], $inc_array)){ // Jetzt wird die Variable wieder mit dem Ordner sowie der Endung best�ckt include("./seiten/".$_GET[seite].".inc.php"); }else{ // Sollte diese Datei nicht Existieren, wird diese Seite aufgerufen include("./seiten/start.inc.php"); } ?>
in diesem fall, werden ersteinmal nur dateien eingelesen, die sich in dem array (also dem jeweiligen ordner befinden) und zusätzlich die endung .inc.php haben ;)
die ganzen $_GET sachen hab ich noch zusätzlich mit ner sicherheits funktion belegt, was alles, was wie ein code ausschaut rausfiltert ;) -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage