Sicherheit bei Seitennavigation über switch ?
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
angreifer
auswahl
beispiel
break
code
einfache methoden
eingabe
eingebaut code
entsprechende inhalt
gefahr
inhalt
kontakt
machen
parameter
passender inhalt
schlechtes beispiel
switch
unterscheidung
url
vermutung
-
Hallo
ich hab in meiner Webseite eine switch-Weiche eingebaut.
Per GET wird ein Wert in die Variabel $link geschrieben.
Der entsprechende Inhalt wird dann per include eingebunden:
(bei den .... stehen noch andere case-Fälle)
switch ($link) { case 'startseite' : $inhalt ="startseite.inc.php"; $body_id='id="startseite"' ; $seitentitel = 'home' ; break ; case 'kontakt' : $inhalt = "kontakt.inc.php"; $body_id= 'id="kontakt-seite"' ; $seitentitel ='kontakt' ; break ; ......... default : $inhalt = "startseite.php" ; $body_id='id="startseite"' ; $seitentitel = 'home' ; } ?>
Jetzt hab ich gelesen das ein Angreifer schädlichen Code an den GET-stream anhängen könnte.
( http://rootserver-blog.de/php/einfache-methoden-um-_get-und-_post-zu-uberprufen/ ).
Besteht diese Gefahr nur bei if / else Unterscheidungen, oder auch bei switch ?
Meinem Verständnis nach gibt es doch für alle anderen Eingaben default, liege ich da richtig ? -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Das Thema was dort beschrieben wird ist ein etwas anderes, als jenes, welches du hier erfragst.
Problematisch wird eine GET oder auch POST Variable immer dann, wenn er ungefragt übernommen wird.
Ich hab da mal ein Beispiel erstellt, bei dem immer ein passender Inhalt ausgegeben werden soll, anhand des GET-Parameters, und wenn nicht, wird diese variable in einem fehlertext eingebaut:if($_GET['seite'] == 'home'){ require('startseite.html'); }else{ echo 'Die Seite "'.$_GET['seite'].'" scheint es nicht zu geben!'; }
Auf diese Weise kann man da natürlich ein paar doofe Sachen mit machen, das fällt dann unter die Rubrick xss atacke, wenn man das ganze aber etwas überprüft, oder einfach eine allgemeine Alternative liefert, dann passiert da auch nichts:if($_GET['seite'] == 'home'){ require('startseite.html'); }else{ echo 'Die Seite, welche sie angefordert haben scheint es nicht zu geben!'; }
Das selbe gilt übrigens für alles was man auf Serverseite macht, somit auch für switch, wobei bei deinem Beispiel keine Gefahr von dieser Seite ausgeht, weil du nirgends den GET-Parameter direkt für die Ausgabe verwendest, sondern anhand des Parameters eine auswahl triffst und ansonsten eine Alternative lieferst. -
Hallo nemoinho
danke für deine ausführliche Antwort, dann lag ich mit meiner Vermutung schon richtig:-) .
Ist denke ich hab mich nur irritieren lassen weil das ein schlechtes Beispiel war.
Dort wird ja eine URL in die Variabel $_GET['lang'] übergeben.
Der Wert (also die URL) liegt dann als Sting im Speicher.
Dieser Wert entspricht aber keinem der vorgegebenen Werte einer Abfrage, also dürfte gar nichts passieren.
Richtig ?
Wenn im der Wert direkt ausgegeben wird, würde der (verlinkte) Schadcode eingefügt werden.
Es hätte (im Gegensatz zu deinem Beispiel) aber doch gar keinen Sinn Werte wie "de" oder "en" auszugeben.
Wenn du mir nochmal zustimmst weiß ich das ichs wirklich begriffen habe .
(das diese Anfänger immer so nervig seien müssen ).
-
Eigentlich hast du es ganz richtig erkannt, dein Beispiel ist aber in sofern gefährlich, dass man über den GET-Parameter dort bestimmt, welches File eingebunden werden soll und wenn man das dann einfach ungefragt übernimmt, dann wirds Problematisch.
Aber wie du richtig erkannt hast, was da übergeben wird ist egal, hauptsache man benutzt es nicht ungeprüft für weitere Schritte! -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage