Felix Riesterer: Kontext-gerechtes Verarbeiten von user-submitted data

Beitrag lesen

Lieber Anfänger,

Gibt es denn soetwas wie einen Leitfaden für die Erstellung eines sicheren Formulares?

ich habe versucht Dir zu erklären, dass es keine sicheren oder unsicheren Formulare gibt. Einzig die Auswertung der darüber abgeschickten Daten kann sicher oder unsicher sein!

Die if (isset($array))-Variante habe ich aus dem Netz, woher soll man denn praktisch wissen, ob man mit GET oder POST oder was auch immer arbeiten muss?!

Woher man das wissen soll? Man ist doch der Autor der entsprechenden Web-Applikation! Und als solcher macht man sich sinnvollerweise sehr gründliche Gedanken, ob man ein Formular mit der Methode POST oder GET erstellt. Immerhin haben beide Methoden ihre Vor- und Nachteile. Und je nach Deiner Entscheidung kann dann Deine Applikation nur mit entsprechend versandten Daten umgehen!

Beispiel: Ich habe etwas unter bestimmten Stichworten bei Google gefunden. Jetzt will ich Dir meine Google-Treffer verlinken. Da Google die Suchanfrage über GET entgegennimmt, kann ich nun meine Suchanfrage verlinken.
* Google zu "SQL injection"
* das hießige Forum zu "SQL injection"

Mit POST geht soetwas nicht. Daher wundere ich mich, dass z.B. die Board-Software punBB Suchanfragen nur per POST entgegennimmt. Dort kann ich keine Suchanfragen verlinken. Wie man aber sieht, ist das hiesige Forum dagegen sehr wohl dazu in der Lage.

Manchmal ist es sinnvoll beide Methoden zu kombinieren. Beispiel:

<form action="/mein-script.php?get-parameter1=lustig&amp;get-parameter2=schnell" method="post">  
    <p><input name="post-parameter1" value="vorbelegt" /></p>  
</form>

Das obige Formular benutzt als Methode "post". Das bedeutet, dass der Wert des <input>-Elements mittels POST an den Server übertragen wird. Dort kommt er dann als $_POST['post-parameter1'] an. Zusätzlich sind aber auch GET-Daten übermittelt worden (nämlich über die URL). Alles zusammen kommen etwa diese Daten an:

$_GET = array(  
    'get-parameter1' => 'lustig',  
    'get-parameter2' => 'schnell'  
);  
  
$_POST = array(  
    'post-parameter1' => 'vorbelegt'  
    // es sei denn der User hat die Voreintragung verändert  
);

Jenachdem was Du erreichen willst, wirst Du entsprechende Formulare bauen müssen, die GET- und/oder POST-Daten verschicken werden. Die Sicherheit kannst Du aber nicht im Formular herstellen. Die muss von Deiner serverseitigen Auswertung der Daten geleistet werden!

Unabhängig davon hilft der gepostete Artikel natürlich sehr, ich wusste nicht, dass man unter diesen Schlagwörtern suchen muss.

Deshalb hatte ich ihn Dir verlinkt. Freut mich, wenn er Dir weiterhilft.

Liebe Grüße,

Felix Riesterer.

--
ie:% br:> fl:| va:) ls:[ fo:) rl:° n4:? de:> ss:| ch:? js:) mo:} zu:)