[PHP] Variablenübergabe aus Formular



  • Hallo alle,

    ich hab hier zwei Varianten der Variablenübergabe aus einem Formular

    Variante 1: Ich gebe dem Submit-Button einen Namen und frage den Zustand mit $_POST[] ab.

    if(isset($_POST['button1']))
    {
      machwas();
    }
    
    echo '
      <form action='.$PHP_SELF.' method=post>
        <input type=submit name=button1 value=klick>
      </form>
    ';
    

    Variante 2: Ich übergebe direkt in der URL eine Variable mit einem gewissen Inhalt.

    if($todo == 'button1')
    {
      machwas();
    }
    
    echo '
      <form action='.$PHP_SELF.'?todo=button1 method=post>
        <input type=submit value=klick>
      </form>
    ';
    

    Welche Variante ist zu bevorzugen? Gibt es dafür eine "richtige" Lösung oder ist es nur Geschmackssache? Ich danke euch für eure informativen Beiträge 🙂

    Gruß bais



  • geschmackssache 🙂 das kommt auf die länge, art und nutzen der übergebenen daten an. ein passwort wirst du ja auch nicht an die url hängen wollen 😃 und wenn die daten sehr lange sind, zb gästebuch, wirst du sie ja auch nicht an die url hängen, da das dann sehr unschön aussieht und es ja mit post sehr einfach geht.

    bei der 2. variante wäre jedoch folgendes zu bevorzugen:

    if($todo == $_GET['button1']);
    


  • Bei GET hast Du eine Limitierung auf 1024 Bytes inklusive der URL, da paßt nicht wirklich viel hinein. Desweiteren ist es möglich via URL falsche Variablenwerte in Deine Skripts zu schmuggeln. Gerade um diese Sicherheitslücke zu schließen wurden $_GET und $_POST ja eingeführt. Ich rate immer dringend zur POST-Methode. Hier gibt es keine Längenlimitierung und der Client sieht so direkt erst mal keine Variablen. Alles was noch heikler ist gehört in $_SESSION, nur die bleiben auch auf dem Server!

    Gruß Karsten



  • wegus schrieb:

    Desweiteren ist es möglich via URL falsche Variablenwerte in Deine Skripts zu schmuggeln.

    Das ist bei POST auch möglich.



  • 2ooplus:

    Das ist bei POST auch möglich.

    per URL mit register_globals off, also nur $_POST[] ? Wie geht das ?



  • @wegus du hast ja geschrieben, falsche Werte mit der Variable schicken.
    Wenn jemand das machen möchte, speichert er lokal dein Formular
    ab und ändert die Werte, wie er Sie will. Wenn er dann noch die
    action Option zu deinem Script leitet, hat er die Werte in deinem Script.

    Wenn du das verhindern möchtest, kannst du nur eine Refererabfrage machen.



  • 2oopuls schrieb:

    Wenn du das verhindern möchtest, kannst du nur eine Refererabfrage machen.

    Aber auch das ist manipulierbar 😉


  • Mod

    http://www.dclp-faq.de/q/q-http-referer.html

    Mehr muss zu 'frag den Referer ab' nicht sagen...

    Man muss einfach die Werte testen. Und man darf sich nie auf Werte verlassen die von aussen kommen, weil die alle manipulierbar sind.

    Im Web hat man halt ein total anderes Konzept als bei einer Desktop Anwendung.



  • Shade of Mine:

    Man muss einfach die Werte testen. Und man darf sich nie auf Werte verlassen die von aussen kommen

    Genau das ist bei größeren Projekten ein erheblicher Aufwand. Typ-Prüfung, Range-Prüfung, ggf. noch mit Checksummen gegenprüfen, Code Injections Abfangen,... da gerät das eigentliche Problem leider oft zur Nebensache. Für öffentlich zugängliche Server ist das aber unumgänglich!



  • Ok, Refererabfrage war ein bescheidenes Beispiel. Ich selbst mache
    mir meist eh die Arbeit, alles auf Warscheinlichkeit zu prüfen. Wenn da
    jemand was eingibt, was da nicht hingehört, dann bringt es dem Angreifer
    eh nichts. Andererseits, wenn irgendwo jemand unbedingt rein will, dann
    schafft er das warscheinlich auch.


Anmelden zum Antworten