Werte aus Formulare formatieren
Mark
- php
0 Andavos0 Thomas Luethi0 Mark
Hallo Ihrs,
Wie bearbeite ich Daten aus Formularen, bzw. eigentlich alles was innerhalb eines PHP-Scripts für den User sichtbar ist, sodass da keiner mehr eigene Scripte ausführen kann oder sonst irgendwelchen Blödsinn auf meiner Seite macht?
Ich habe mir bisher folgende Funktion zusammengebastelt:
function eingabe_format($wert)
{
$wert=strip_tags($wert);// ausreichend??
return $wert;
}
Anmerkung; Soll in eine MySQL-DB, ein Link zu dem Thema Sicherheit/Formatierungen von Eingaben wäre auch klasse.
Gruss, Mark
Hallo,
der wichtigste Befehl:
$var = htmlentities($var);
Sonderzeichen (ä, <, > Ü) werden in den HTML Code gewandelt, HTML Code etc. wird verhindert
Und dann noch nl2br()
Auch noch sinvoll stripslashes()
MFG
Andavos
Hallo,
Wie bearbeite ich Daten aus Formularen, bzw. eigentlich alles was innerhalb eines PHP-Scripts für den User sichtbar ist, sodass da keiner mehr eigene Scripte ausführen kann oder sonst irgendwelchen Blödsinn auf meiner Seite macht?
strip_tags() ist schonmal nicht schlecht.
Danach gleich noch alle spitzen Klammern ersetzen:
htmlspecialchars() - oder htmlentities(), wenn Du willst.
Boese Zeichen entfernen: \0, grundsaetzlich alle
Zeichen unter dezimal 32.
Anmerkung; Soll in eine MySQL-DB, ein Link zu dem Thema Sicherheit/Formatierungen von Eingaben wäre auch klasse.
mysql_escape_string()
Lies auch die dclp-FAQ:
Wie unterscheide ich böse Variablen von guten?
http://www.dclp-faq.de/q/q-security-variablen.html
Prüfe importierte Parameter. Traue niemandem
http://www.dclp-faq.de/q/q-sicherheit-parameter.html
und den Rest des Kapitels "Sicherheit".
;-)
Gruesse,
Thomas
Hallo Thomas, danke!
...
Boese Zeichen entfernen: \0, grundsaetzlich alle
Zeichen unter dezimal 32.
...
Habe mir jetzt alles durchgelesen, nur zu obigem kann ich nichts finden und kann dem auch nicht folgen?! :(
Gruss, Mark
Hallo,
Boese Zeichen entfernen: \0, grundsaetzlich alle
Zeichen unter dezimal 32.Habe mir jetzt alles durchgelesen, nur zu obigem kann ich nichts finden und kann dem auch nicht folgen?! :(
Die ASCII-Zeichen 0 bis 31 sind Sonderzeichen (sogenannte
Steuerzeichen). Was sie bedeuten, siehe:
http://www.asciitable.com/ascii-full.gif
Ich weiss nicht, ob das Problem wirklich praxisrelevant ist
(z.B. ob man - und sei es auch nur mit speziell boeser
Software - ueberhaupt solche Zeichen via HTTP uebermitteln
kann), oder ob es ein rein theoretisches Problem ist.
Jedenfalls habe ich mal irgendwo gelesen, dass gewisse
Programme (z.B. sendmail) mit einem Null-Byte (d.h. ASCII 0)
aus der Fassung gebracht werden koennen, und dass man
das Nullbyte deshalb aus Strings entfernen sollte.
Das kann man z.B. mit str_replace() oder anderen String-Funktionen.
http://www.php.net/manual/de/function.str-replace.php
$sauberstring=str_replace("\0","",$schmutzigstring);
Diese Sonderzeichen bis Dezimal 31 kann man z.B. mit
mit chr() erzeugen der hexadezimalen oder oktalen
Schreibweise codieren.
Dezimal 13 = hexadezimal 0D = oktal 15
chr(13) "\x0D" "\15"
http://www.php.net/manual/de/language.types.string.php
Ich wuerde alle Zeichen von dezimal 0 bis 31 mit Ausnahme von
10 und 13 (Zeilenumbrueche) entfernen.
http://www.tiptom.ch/homepage/faq.html?q=zeilenumbruch
Gruesse,
Thomas