phpbar.de logo

Mailinglisten-Archive

[php] textarea

[php] textarea

Thomas Bindl php_(at)_phpcenter.de
Wed, 16 Jan 2002 13:23:31 +0100


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