kostenloser Webspace werbefrei: lima-city


User-Eingabe (Formular) escapen (filtern)

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    trendweb

    trendweb hat kostenlosen Webspace.

    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
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. hackyourlife

    Moderator Kostenloser Webspace von hackyourlife

    hackyourlife hat kostenlosen Webspace.

    Wo genau werden die Werte verwendet?

    Falls du die Daten auf einer Seite ausgibst reicht
    htmlspecialchars()
    , wenn du SQL-Statements zusammenbaust wirst du wohl
    mysql_real_escape_string()
    nutzen müssen (oder auf Prepared Statements ausweichen, da musst du nichts escapen).

    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.
  4. Autor dieses Themas

    trendweb

    trendweb hat kostenlosen Webspace.

    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
  5. 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.
  6. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!