mediengestalter.info
FAQ :: Mitgliederliste :: MGi Team

Willkommen auf dem Portal für Mediengestalter

Aktuelles Datum und Uhrzeit: Fr 29.03.2024 13:49 Benutzername: Passwort: Auto-Login

Thema: PHP - Variablenübergabe (in Links ohne "&") vom 19.08.2004


Neues Thema eröffnen   Neue Antwort erstellen MGi Foren-Übersicht -> Programmierung -> PHP - Variablenübergabe (in Links ohne "&")
Seite: Zurück  1, 2, 3, 4  Weiter
Autor Nachricht
Gartenzwerg

Dabei seit: 29.08.2004
Ort: Wuppertal
Alter: -
Geschlecht: -
Verfasst So 29.08.2004 14:41
Titel

Antworten mit Zitat Zum Seitenanfang

Die meiner Ansicht nach einfachste Möglichkeit ist es, den Referrer zu benutzen. Einfach auf der Login-Bestätigungsseite einen Link mit der Referrer-URL erzeugen, die enthält alle Parameter. Wenn das Formular fürs Login eine eigene Seite ist, den Referrer in ein hidden-Feld schreiben und daraus verwenden:

Code:
<a href="<?=$_SERVER["HTTP_REFERER"]?>">Zur&uuml;ck zur zuletzt aufgerufenen Seite</a>


Oder entsprechend:

Code:
<form action="login.php" method="post">
  <input type="hidden" name="lastpage" value="<?=$_SERVER["HTTP_REFERER"]?>" />
(Formular)
</form>




Noch was zu den GUIDs (Für die, die nich wissen was das is, das steht für "Globally Unique Identifier"):
Unterseiten per include() sicher einbinden sollte man z.B. mit der switch()-Anweisung, der man den Parameter übergibt und dann die entsprechende Seite einbindet:

Code:
switch($_REQUEST["page"]) {
    case "forum":
        include("forum.inc.php");
        break;

    case "guestbook":
        include("gb.inc.php");
        break;

    case "home":
    default:
        include("home.inc.php");

}


Das "default:" sorgt dafür, dass bei allem was nicht per case abgedeckt wurde, immer die Startseite angezeigt wird. Wie man am Beispiel sieht, wird hier keine Angabe aus der URL im Dateinamen der include()-Funktion benutzt.
Weiters sollte man auf Variablen, die man aus der URL benutzt, immer über die Superglobals $_GET, $_POST und $_REQUEST zugreifen. So sieht man nämlich im Code sofort, ob eine Variable externen Urspungs ist, oder im Script erst angelegt und gefüllt wurde. Erleichert die Suche nach Sicherheitslücken erheblich.

Übrigens bringt es auch nichts, so etwas zu machen:

Code:
include("html/" . $_REQUEST["page"] . ".php");


Auf den ersten Blick könnte man meinen, dadurch könnte man z.B. keine Dateien ohne die Endung .php aufrufen, aber das ist falsch! Ruft man die Seite z.B. mit "http://www.example.com/index.php?page=../../../../../etc/passwd%00" auf, wird das .php abgeschnitten (Nullterminierung sei Dank!), und die passwd-Datei wird dennoch geöffnet.
Beruhigend ist allerdings, dass die passwd-Datei nur in den seltensten Fällen noch Passwörter enthält, da diese auf modernen Systemen in die Datei /etc/shadow verlegt wurden. Ebenso sollte der Serveradmin PHP anständig konfiguriert haben, sprich open_basedir auf das Homedir gesetzt und safe_mode aktiviert haben.


Zuletzt bearbeitet von Gartenzwerg am So 29.08.2004 14:57, insgesamt 2-mal bearbeitet
  View user's profile Private Nachricht senden Website dieses Benutzers besuchen
Achim M.

Dabei seit: 17.03.2003
Ort: -
Alter: -
Geschlecht: Männlich
Verfasst So 29.08.2004 14:51
Titel

Antworten mit Zitat Zum Seitenanfang

Gartenzwerg hat geschrieben:
Die meiner Ansicht nach einfachste Möglichkeit ist es, den Referrer zu benutzen.


Warum ist es schlecht, mit dem Referer zu arbeiten?

Gruß

Achim
  View user's profile Private Nachricht senden
Anzeige
Anzeige
Gartenzwerg

Dabei seit: 29.08.2004
Ort: Wuppertal
Alter: -
Geschlecht: -
Verfasst So 29.08.2004 15:05
Titel

Antworten mit Zitat Zum Seitenanfang

Achim M. hat geschrieben:
Gartenzwerg hat geschrieben:
Die meiner Ansicht nach einfachste Möglichkeit ist es, den Referrer zu benutzen.


Warum ist es schlecht, mit dem Referer zu arbeiten?


Der Text in der Newsgroup bezieht sich auf sicherheitsrelevante Verwendungszwecke des Referrer-Strings. Einige verwenden diesen, um z.B. zu verhindern, dass Downloads von anderen Seiten verlinkt werden können. Das ist hier nicht der Fall, es dient lediglich dem Benutzerkomfort!


Zuletzt bearbeitet von Gartenzwerg am So 29.08.2004 15:05, insgesamt 1-mal bearbeitet
  View user's profile Private Nachricht senden Website dieses Benutzers besuchen
beeviZ

Dabei seit: 30.09.2002
Ort: -
Alter: -
Geschlecht: Männlich
Verfasst So 29.08.2004 15:06
Titel

Antworten mit Zitat Zum Seitenanfang

dastef hat geschrieben:
beeviZ hat geschrieben:
Code:

<?php
global $_GET;
$_GET['projekt']; ?>


$_GET ist bereits ne superglobale Lächel bei der musste sowas nicht
machen, selbst in funktionen is die deshalb schon bekannt *zwinker*
» http://de.php.net/variables.predefined

beeviZ hat geschrieben:
vorher hab ichs mit
<? include($projekt); ?>
versucht, da hat er aber rumgemeckert das die variable nicht definiert ist.


und hier verwende anstatt $projekt $_GET['projekt'];
wieso du das nicht schon gemacht hast, wo du ja sogar mit print_r()
gesehen hast, dass das array ein element namens projekt hat? * Ööhm... ja? *


ich hab von php rein garkeine ahung. mir hat nur n kollege gesagt (der nebenbei selbst gerade auf der arbeit war) das ich das mit der GET methode machen könnte, und print_r zur überprüfung nehmen kann was der da überhaupt ausliest. und ich hab dann rumprobiert. keine ahnung *g*
  View user's profile Private Nachricht senden
Gartenzwerg

Dabei seit: 29.08.2004
Ort: Wuppertal
Alter: -
Geschlecht: -
Verfasst So 29.08.2004 15:11
Titel

Antworten mit Zitat Zum Seitenanfang

"global $_GET;" ist nicht nötig, zumal $_GET sowieso eine Superglobale, also auch in Funktionen automatisch verfügbar ist.

@beeviZ, ich empfehle dir, mal das PHP-Manual zu den vordefinierten Variablen durchzulesen, ist sehr aufschlussreich:

http://de.php.net/manual/de/language.variables.predefined.php
  View user's profile Private Nachricht senden Website dieses Benutzers besuchen
karmacoder

Dabei seit: 15.04.2002
Ort: Fürth
Alter: 42
Geschlecht: Männlich
Verfasst So 29.08.2004 15:12
Titel

Antworten mit Zitat Zum Seitenanfang

Gartenzwerg hat geschrieben:

Der Text in der Newsgroup bezieht sich auf sicherheitsrelevante Verwendungszwecke des Referrer-Strings. Einige verwenden diesen, um z.B. zu verhindern, dass Downloads von anderen Seiten verlinkt werden können. Das ist hier nicht der Fall, es dient lediglich dem Benutzerkomfort!


Les den Thread mal von vorne, das ist sicherheitsrelevant.
  View user's profile Private Nachricht senden Website dieses Benutzers besuchen
Gartenzwerg

Dabei seit: 29.08.2004
Ort: Wuppertal
Alter: -
Geschlecht: -
Verfasst So 29.08.2004 15:23
Titel

Antworten mit Zitat Zum Seitenanfang

karmacoder hat geschrieben:
Les den Thread mal von vorne, das ist sicherheitsrelevant.


Zitat:
Das Problem:
Ich will, wenn ich mich als admin auf einer Seite einlogge, nicht an der Startseite rauskommen, sondern dort, wo ich gerade bin. Das Problem ist ja jetzt, dass ich dann bei allen 3 Variablen abfragen muss, ob sie gesetzt sind, oder nicht.


Habe ich das so falsch verstanden? Hm.
Er will doch lediglich, dass er, wenn er sich auf einer Seite einloggt (wohl mit User/Pass-Feldern unterm Menü oder so), nach dem Login wieder zu dieser Seite zurückkehrt, ohne sich da erneut hinklicken zu müssen. Was ist denn daran sicherheitsrelevant? Dass da Benutzerdaten übertragen werden? Die haben nix mit dem Referrer zu tun, der wird in dem Falle lediglich für den Redirect zurück zur Ursprungsseite benutzt, und das ist in meinen Augen kaum ein Sicherheitsrisiko *zwinker*
Das Argument mit den drei Variablen etc. erübrigt sich ja, weil der Referrer alle Informationen enthält. Sicherheitskritischer ist das nicht mehr oder weniger, als den Link dann oben in der URL-Leiste manuell einzugeben *zwinker*

Ansonsten bitte ich um eine Erklärung, was er wirklich will, schein das dann ja nicht zu kapieren Au weia!


Zuletzt bearbeitet von Gartenzwerg am So 29.08.2004 15:25, insgesamt 1-mal bearbeitet
  View user's profile Private Nachricht senden Website dieses Benutzers besuchen
rob

Dabei seit: 11.12.2003
Ort: ~/
Alter: 46
Geschlecht: Männlich
Verfasst Mo 30.08.2004 11:30
Titel

Antworten mit Zitat Zum Seitenanfang

um noch mal hier rauf zurückzukommen:
Zitat:
index.php?projekt=../../../../../../../../../../../../../etc/passwd
und bumm hab ich die liste aller user mit ihren md5 passwörtern und kann mir die in ruhe auf meinem rechnernetz knacken.

Nein! So einfach wird es normalerweise nie sein.
Klar hat der PHP-Interpreter (oder auch PERL) bei vielen Providern auch das Recht in das /etc-Verzeichnis zu schauen (Webserver sollte man vielleicht in einer Chroot-Umgebung laufen lassen oder sonst wie sichern, aber egal...)
Und jetzt kann man mit PHP sich nunmal auch bei vielen (ungeschickten) Providern die /etc/passwd anschauen.
<? exec("cat /etc/passwd"); ?> reicht oftmals aus.
Aber damit kann man noch nichts anfangen. Ein modernes Unix-System benutzt Shadowing - per Default. Mir fällt jetzt so spontan auch keine Linux-Distri ein, wo das nicht der Fall wäre.
Weil jeder auf die /etc/passwd zugreifen kann, stehen da jetzt keine Passwörter mehr drin. Die findet man nun in der /etc/shadow und die ist jetzt ausschließlich von root lesbar. Und weil niemals ein Provider PHP mit root-Rechten laufen läßt, wird man auch nicht an die Hashes im Passwordfile kommen.


Zuletzt bearbeitet von rob am Mo 30.08.2004 11:31, insgesamt 1-mal bearbeitet
  View user's profile Private Nachricht senden
 
Ähnliche Themen Variablenübergabe
variablenübergabe in formularen
Problem mit Variablenübergabe in Flash
hilfe... variablenübergabe von flash nach php????
Flash MX Links
LoadVars mit Links
Neues Thema eröffnen   Neue Antwort erstellen Seite: Zurück  1, 2, 3, 4  Weiter
MGi Foren-Übersicht -> Programmierung


Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst an Umfragen in diesem Forum nicht mitmachen.