Mailinglisten-Archive |
Hallo nochmal, Konnte das Problem mit einigen Stunden googlen und Archiv immer noch nicht lösen, deshalb versuche ich es nochmal hier, in der Hoffnung, dass ich das Problem vielleicht noch lösen kann bevor ich durchdrehe. >Das Problem für mich ist, dass das Formular, zB aufgrund eines falsch >eingegebenen Passworts mehrfach aufgerufen werden kann und Funktionen wie >addslashes() oder htmlspecialchars() immer wieder erneut bereits escapede >Sachen escapen würden. Jedoch muss auch bei jedem check der Eingaben >geprüft werden was der User geschrieben hat und evt. escaped werden, da er ja >was geändert haben könnte. Hier ein Ausschnitt aus dem src: <?php //Datenbankverbindung include('/www/44/include.inc.php'); //Sessionmanagement laden include('/www/44/session.inc.php'); //Empfängerdaten laden (entfernt) //Testen ob pwd, username usw stimmen, falls ja, abspeichern if (!empty($send)) { $query = mysql_query("SELECT pwd, id FROM users WHERE uname LIKE '$HTTP_POST_VARS[sender]' AND access > 9;"); while($array = mysql_fetch_array ($query)) { $senderid = $array["id"]; $dbpwd = $array["pwd"]; }; //pwd checken if(strtolower($HTTP_POST_VARS[pwd]) != strtolower ($dbpwd)) { $error[pwd] = '1'; }; //Existiert der User überhaupt? if($senderid >! '0') { $error[sender] = '1'; }; //existiert der Empfänger? if($recid >! '0') { $error[recipient] = '1'; }; //msg speichern if(!isset($error)) { // Das addslashes() sollte für das sicher Speichern in der DB reichen, oder? $message = addslashes($HTTP_POST_VARS [message]); mysql_query("INSERT INTO messages (sender, empfaenger, message) VALUES ('$senderid', '$recid', '$message')"); }; }; //Laenge der Nachricht feststellen if (isset($HTTP_POST_VARS[message])) { $zeichenzahl = strlen($HTTP_POST_VARS[message]); $rest = 800 - $zeichenzahl; } else { $rest = 800; }; //Mindestlänge testen if (isset($zeichenzahl) && $zeichenzahl < 100) { $error[msg] = '1'; }; //Das sollte doch reichen um die Eingaben sicher zu machen, oder? $message = htmlspecialchars($HTTP_POST_VARS[message]); ?> <HTML> <HEAD> <SCRIPT LANGUAGE="JavaScript"> function textCounter(field, countfield, maxlimit) { if (field.value.length > maxlimit) field.value = field.value.substring(0, maxlimit); else countfield.value = maxlimit - field.value.length; } </script> <TITLE>Details</TITLE> </HEAD> <BODY bgcolor=black> <div align=center> </iframe> <br><br> <font face="Arial, Verdana" size=3 color=silver> <?php if(empty($send) || isset($error)) { echo "<b>Nachrichten-Versand:</b><br> <FORM action=$PHP_SELF METHOD=POST> <input type=hidden name=empfaenger value=\"$empfaenger\"> <input type=hidden name=sid value=\"$sesdata[SID]\"> $empfaenger"; if ($error[sender] == '1') { echo "</font><font color=red>Benutzer existiert nicht!</font><br><font color=silver>"; }; echo "Absender: <input type=text name=sender value=\"$sender \" size=15><br>"; if ($error[pwd] == '1') { echo "</font><font color=red>Das Passwort ist falsch!</font><br><font color=silver>"; }; echo "Passwort: <img src=/blank.gif width=3 height=0 border=0 ><input type=password name=pwd size=15><br>"; if ($error[msg] == '1') { echo "</font><font color=red>Die Nachricht ist zu kurz!</font><br><font color=silver>"; }; echo "<textarea name=message wrap=physical cols=35 rows=6 onKeyDown=\"textCounter (this.form.message,this.form.remLen,800);\" onKeyUp= \"textCounter(this.form.message,this.form.remLen,800);\"> $message</textarea><br><input readonly type=text name=remLen size=3 maxlength=3 value=\"$rest\"><br> <input type=submit name=send value=\"Absenden\"> </form></div>"; } else { echo "Die Nachricht wurde erfolgreich verschickt!"; }; ?> Wenn die Eingabe nun falsch ist, erscheint bei der Eingabe von ' "Hallo!" sagte ich ' nach dem htmlspecialchars ' \"Hallo!\" sagte ich '. Das ist ja nun wirklich nicht gerade schön. Nur welche Lösung gibt es um die Eingabe vor bösen Buben abzusichern und einen sauberen html-Quelltext, der der Eingabe entspricht, zu erhalten? Danke! Gruß, Thomas
php::bar PHP Wiki - Listenarchive