Inhalt von POST-Variable abgeschnitten

Leyja

Mitglied
Ich bastel zusammen mit einer Freundin an einer Seite, die eine eigene Welt darstellen soll (http://www.rhejvandar.de). Da man dort auch verschiedene Interaktionen machen kann, hat sie vor einier Zeit ein Login-System gebastelt. Dabei haben wir irgendwann festgestellt, dass man sich mit Namen, die ein Apostroph enthalten (also zum Beispiel "Ley'ja"), nicht registrieren kann.
Mit der Funktion "addslashes()" haben wir das soweit alles hinbekommen, registrieren und einloggen geht inzwischen.

Es tritt aber ein anderes kleines Problem auf. Und war sieht das folgendermaßen aus. Wenn man sich anmelden möchte, gibt man seinen Benutzernamen ein und sein Passwort. Dann wird überprüft, ob das alles so stimmt, wies sein soll. Wenn der Benutzername existiert, das Passwort aber falsch ist, wird die Seite neu geladen und die Meldung kommt, dass das Passwort falsch ist. Dann klickt man auf einen Button, der einen dann wieder zurück zum Einlog-Feld bringt. Dort soll dann in dem Feld für Benutzername der Name schon drin stehen, so dass man nur das Passwort neu eingeben muss. Klappt auch, bei normalen Namen.
Bei den Namen mit einem Apostroph, zum Beispiel "Ley'ja", steht in dem Feld für Benutzername nur "Ley" (bzw. "Ley\", falls vorher an einer Stelle noch die addslashes() hinzugefügt wurde), also alles ab dem Apostroph wird abgeschnitten.
Das ganze funktioniert irgendwie so, dass die Inhalte der Post-Variable für den Benutzernamen übergeben werden. Bis zur Zwischenseite klappt das auch alles, hab mir da die Variable ausgeben lassen und da ist der Inhalt noch komplett. Wenn man sich dann allerdings erneut weiterleiten lässt, ist der Rest weg.

Der Teil des Skriptes sieht folgendermaßen aus (also die Zwischenseite, wo noch alles in Ordnung ist und von der aus man dann zum Einlogg-Feld zurückkommt).
PHP:
echo "<form action='?logo=album&amp;site=album/album' method='post'>\n";
                        echo "<div align='center'>\n";
                        echo "Das war das falsche Zauberwort!<br /><br />\n";
                        echo "<input type='hidden' name='username' value='".$_POST['username']."'>\n";
                        echo "<input type='hidden' name='password' value='".$_POST['password']."'>\n";
                        echo "<input type='submit' name='zurueck' value='neuer Versuch' class='albbutton'><br/>\n";
                        echo "</div>\n";
                        echo "</form>\n";
Kann das irgendwie an den verstckten Input-Feldern liegen? Oder woran kann es sonst liegen, dass er auf einmal den Inhalt der Post-Variablen verändert? Hat jemand ne Idee? Oder muss ich noch irgendwelchen zusätzlichen Code posten?

Wäre schön, wenn mir jemand helfen könnte :)
 
Das liegt sicher nicht am Post wert oder am hidden feld.
Ich vermute mal das eher an der Prüffunktion liegt die gefährliche werte ausondert.
Mit dem Html teil kann man sicher daher auch net den fehler feststellen.

Mfg Splasch
 
Das liegt sicher nicht am Post wert oder am hidden feld.
Ich vermute mal das eher an der Prüffunktion liegt die gefährliche werte ausondert.
Mit dem Html teil kann man sicher daher auch net den fehler feststellen.

Mfg Splasch

Hm, irgendwie komm ich da nicht so ganz mit ^^" Bin halt auch noch mehr oder weniger Anfänger, was das angeht. Was meinst du genau mit Prüffunktion? Das Überprüfen des Passworts?
Das ganze ist eigentlich nur ne Verschachtelung von If-Abfragen, also erst, ob der Benutzername existiert, dann ob das Passwort richtig ist. Da wird vorher eben auf die Datenbank zugegriffen und geguckt, obs da Übereinstimmung gibt. Und wenn der Benutzername vorhanden ist, dann wird eben geguckt, ob dass Passwort richtig ist bzw. ob überhaupt eins eingegeben wurde. Wenn nicht, komm ich zu der Meldung, dass das Passwort falsch oder nicht vorhanden ist.
 
Nein ich mein nicht die Prüfung des Password sondern die Prüfung des Post wertes.
Sql injection, Scripting angriffe unsw. die ganzen funktionen von php die den Post wert voher prüfen bevor die Db abfrage statt findet.

Je nachdem welche Sicherheitsprüfunktion du alle benutz hast addslashes() unsw.


Mfg Splasch
 
Die Lösung für das Problem findest du indem du andere Anführungszeichen verwendest und den Usernamen mit htmlentities so abänderst das keine " mehr enthalten sind sondern dann &quote; drinsteht.

PHP:
echo "<input type='hidden' name='username' value=\"".htmlentities($_POST['username'])."\">\n";

warscheinlich würde es auch reichen die " zu ersetzen.

Das Problem es abschneidens kommt daher das du innerhalb der Value werte nicht einfach \' einfügen darfst. Der Value endet, und es wird abgeschnitten ,)
 
Zurück