User-Eingabe (Formular) escapen (filtern)
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
ausgabe
ausweichen
code
dank
eingabe
filter
filtern
funktion
http
manual
paar
packen
sonderzeichen
speichern
statement
string
unterschiedlich filtern
url
verwenden
zahl
-
Hallo
ich möchte für Anti-Hack jede User-Eingabe
(egal ob Formular POST oder GET Query-String, etc.)
richtig escapen (Sonderzeichen / Hack-Code raus filtern)
... das soll am besten in einer Funktion erledigt werden, damit ich
diese escape-Funktion für jede (neue) EIngabe immer wieder verwenden kann
es soll auch ohne mysql_real_escape_string laufen, aber so ähnlich wirksam sein
also auch ohne dass eine DB-Verbindung steht, jede User-Eingabe "escapen"
jetzt habe ich schon eine kleine Funktion dafür geschrieben,
bin mir aber nicht sicher ob das gut genug ist .... bitte um Verbesserungs-Vorschläge
Hier mein Entwurf für die Funktion: http://codepad.viper-7.com/OCfifC
... und die Funktion sieht so aus:
// --------------------------------------------------------------- function escape_invar($var) { if (is_array($var)) { array_map('escape_invar', $var); } else { if (mb_detect_encoding($var, 'UTF-8', true) === FALSE) { $var = utf8_encode($var); } ## $var = htmlspecialchars($var); ## $var = htmlentities($var); $var = str_replace(array('\\', "'", '"', "\0", "\r", "\n", "\t", "\s"), ' ', $var); ## $var = preg_replace("/[[:cntrl:]]/is", ' ', $var); while(strchr($var,'\\')) { $var = stripslashes($var); } $umlx = utf8_encode('äöüÄÖÜß'); $var = preg_replace("/[^a-zA-Z'.$umlx.'0-9 ,:;_\-\.\/\+]/su",' ',$var); $var = preg_replace('/ {2,}/', ' ', $var); $var = trim($var); } return $var; } // ---------------------------------------------------------------
die User-Eingabe (und dann die Ausgabe) sollen in UTF-8 sein
bitte schreibt mir, ob und wie man das noch besser machen kann,
... soll ich htmlspecialchars() bzw. htmlentities() verwenden oder andere
usw.
wie gesagt, ich will jede User-Eingabe $_REQUEST damit escapen !!!
es sollen alle "bösen" Sonderzeichen entfernt werden (inkl. Steuerzeichen)
aber Umlaute wie ä ö ü ß Ä Ö Ü und ein paar Satzzeichen sollen bleiben
oder gibt's dafür schon fertige "gute" Lösungen (z.B. bei sourceforge ... etc.) ?
Danke
Beitrag zuletzt geändert: 13.4.2014 12:38:57 von trendweb -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Wo genau werden die Werte verwendet?
Falls du die Daten auf einer Seite ausgibst reicht
, wenn du SQL-Statements zusammenbaust wirst du wohlhtmlspecialchars()
nutzen müssen (oder auf Prepared Statements ausweichen, da musst du nichts escapen).mysql_real_escape_string()
Und dann gäbe es da noch die Möglichkeit zu »filtern«, also z.B. nur Zahlen, Buchstaben oder sonst was (vorher definiertes) zuzulassen, siehe filter_input() bzw. filter_var() oder alternativ reguläre Ausdrücke. Mit escapen hat das allerdings nichts mehr zu tun. -
es soll für alle möglichen verschiedene Anwendungen
(Ausgabe, Speichern, ...) verwendet werden können,
also wenn in MySQL DB, dann werde ich auch mysql_real_escape_string() verwenden,
aber für den ganzen "Rest" (u.a. auch für Speichern in .txt / .csv oder nur Ausgabe)
will ich hiermit eben eine Funktion haben, die ich für alle User-Eingaben benutzen kann.
bei der Nutzung von htmlspecialchars() ist wohl für Ausgabe im Browser gut,
aber wenn ich den Wert (String) z.B. in einer CSV speichern will, dann sollte
dort der Text in "reinem" UTF-8 ohne htmlentities gespeichert werden,
dafür habe ich sogar schon an den Einsatz von html_entity_decode() gedacht.
ich sehe schon, ich sollte evtl. doch nicht versuchen alles in eine Funktion zu packen,
sondern evtl aufteilen in zwei: a) für nur Ausgabe .... und b) für Speichern in File
und für das Speichern in MySQL DB nehme ich dann mysql_real_escape_string()
Das mit filter_input() bzw. filter_var() sieht ja auch ganz brauchbar aus, besonders
zusammen mit den Types of filters kann man sich damit sicher viel Schreib-Arbeit sparen :=)
DANKE!
Beitrag zuletzt geändert: 13.4.2014 14:38:35 von trendweb -
Für die Filterung gibt es leider keine Eierlegende Wollmilchsau.
Das Problem ist: Es kommt darauf an, was du mit der Eingabe machen möchtest.
Ein paar Beispielanwendungen bei der Nutzung von Variablen bei denen man immer unterschiedlich filtern muss:
- im SQL Query
- in Pfadangaben
- im HTML Code
- in E-Mails
- im PHP-Code
- Plaintext
- ...
Eine Variable für alle Fälle zu filtern ist zwar möglich, aber nicht sinnvoll.
Z.B. ein Benutzer möchte einen Beitrag schreiben der nachher innerhalb deines HTML Codes auf deiner Webseite ausgegeben wird und sämtliche "/" oder "\" escaped werden. -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage