Ist folgende Überprüfung möglich?
Phil Z.
- php
Hallo.
Ich hab ein Formular und will die Eingaben "sicher" machen per
htmlspecialchars() und mysql_escape_string().
Dazu habe ich ein array mit den Namen der Felder, danach wird jedes Überprüft.
$feld = array('1'=>'nick','2'=>'name','3'=>'email','4'=>'super',
'5'=>'toll','6'=>'pwd','7'=>'pwd2','8'=>'branche','9'=>'eingabe');
foreach($feld as $key=>$element){
$$element=htmlspecialchars(mysql_escape_string($_POST["$element"]));
}
Das einzige was mir sorgen macht ist das $$element. Das kann i-wie nciht richtig sein aber ich weiß nicht wie ich sonst folgendes erreiche:
Aus jedem $element soll eine Variable $."$element" werden parktisch
soll das nacher so aussehen:
[1]
$nick = htmlspecialchars(mysql_escape_string($_POST["nick"]));
$name = htmlspecialchars(mysql_escape_string($_POST["name"]));
u.s.w.
Man beachte: die Variablen werden nacher noch weiterverwendet/verarbeitet ( in datenbank geschrieben, ggf. verschlüsselt u.s.w.). Ist das überhaupt möglich oder muss ich nacher
jedes einzelnd hin schreiben(so wie oben bei [1])?
mfg
Phil Z.
Hallo Phil,
$feld = array('1'=>'nick','2'=>'name','3'=>'email','4'=>'super',
'5'=>'toll','6'=>'pwd','7'=>'pwd2','8'=>'branche','9'=>'eingabe');foreach($feld as $key=>$element){
$$element=htmlspecialchars(mysql_escape_string($_POST["$element"]));
}
[...]
Man beachte: die Variablen werden nacher noch weiterverwendet/verarbeitet ( in datenbank geschrieben, ggf. verschlüsselt u.s.w.). Ist das überhaupt möglich oder muss ich nacher
jedes einzelnd hin schreiben(so wie oben bei [1])?
Dein Vorhaben ist machbar, ich würde den Code allerdings ein wenig abändern (zudem mysql_real_escape_string() statt mysql_escape_string(), die Zahlen werden nicht benötigt, htmlspecialchars() ist zumeist sinnvoller bei der Ausgabe des in der Datenbank gespeicherten Codes):
$field = array('nick', 'name', 'email', 'super', 'toll', 'pwd', 'pwd2', 'branche', 'eingabe');
foreach ($field as $index) {
$$index = mysql_real_escape_string($_POST[$index]);
}
Code ungetestet, müsste aber schlüssig sein. :-)
Grüße
Marc Reichelt || http://www.marcreichelt.de/
Hi.
Dein Vorhaben ist machbar, ich würde den Code allerdings ein wenig abändern (zudem mysql_real_escape_string() statt mysql_escape_string(), die Zahlen werden nicht benötigt, htmlspecialchars() ist zumeist sinnvoller bei der Ausgabe des in der Datenbank gespeicherten Codes).
Ich danke dir. Hoffe das klappt. Aber warum sollte ich kein htmlspecialchars() verwenden?
mfg
Phil Z.
hi,
Aber warum sollte ich kein htmlspecialchars() verwenden?
Wie oft kommen die Worte "kein", "nicht", "lass das bleiben" oder ähnliche Negierungen in
htmlspecialchars() ist zumeist sinnvoller bei der Ausgabe des in der Datenbank gespeicherten Codes
vor?
gruß,
wahsaga
Hi.
Wie oft kommen die Worte "kein", "nicht", "lass das bleiben" oder ähnliche Negierungen in
...
vor?
:D:D:D:D Sorry.. verlesen.*schäm*
mfg
Phil
Moin!
Ich hab ein Formular und will die Eingaben "sicher" machen per
htmlspecialchars() und mysql_escape_string().
Das Anwenden dieser Funktionen bringt nicht automatisch Sicherheit. Man muß schon wissen, was man da tut.
Dazu habe ich ein array mit den Namen der Felder, danach wird jedes Überprüft.
$feld = array('1'=>'nick','2'=>'name','3'=>'email','4'=>'super','5'=>'toll','6'=>'pwd','7'=>'pwd2','8'=>'branche','9'=>'eingabe');
Wenn du ein numerisch indiziertes Array willst, dann zähle die Elemente einfach auf:
$feld = array('nick','name','email','super','toll','pwd','pwd2','branche','eingabe');
foreach($feld as $key=>$element){
Wenn du ein Array mit foreach durchgehst, und den Schlüssel nicht brauchst, dann lass ihn einfach weg:
foreach ($feld as $element)
$$element=htmlspecialchars(mysql_escape_string($_POST["$element"]));
Wann immer du angeblich "variable Variable" zu benötigen glaubst, ist der Einsatz eines Arrays wesentlich besser: Fehler überschreiben dir nicht unabsichtlich ganz andere Variablen, die Fehlersuche und das Debugging sind leichter, der Code ist übersichtlicher.
Abgesehen davon willst du in deinem Code Dinge tun, die man so nicht tun sollte. Die Anwendung von mysql_real_escape_string() soll erfolgen direkt vor der Zusammensetzung des SQL-Strings.
Die Anwendung von htmlspecialchars() soll erfolgen direkt vor der Ausgabe des Textes an den Browser bzw. den HTML-Kontext.
Beides auf Vorrat, kombiniert und auch noch falsch verschachtelt zu realisieren ist ziemlicher Unsinn.
Das einzige was mir sorgen macht ist das $$element. Das kann i-wie nciht richtig sein aber ich weiß nicht wie ich sonst folgendes erreiche:
Aus jedem $element soll eine Variable $."$element" werden parktisch
Nutze ein Array: $post_escaped[$element]=mysql_real_escape_string($_POST[$element]);
Man beachte: die Variablen werden nacher noch weiterverwendet/verarbeitet ( in datenbank geschrieben, ggf. verschlüsselt u.s.w.). Ist das überhaupt möglich oder muss ich nacher jedes einzelnd hin schreiben?
Wenn du übersichtlichen Code wünschst, nimmst du entweder die Arrayversion oder listest alle Variablen einzeln auf.
- Sven Rautenberg