La Problem: PHP Post (Filter) auch für Array

Hallo,

für unsere per POST übergebenen Daten habe ich einen kleinen Filter gebastelt:

function filter($data) {
$data = trim(htmlspecialchars(strip_tags($data)));

if (get\_magic\_quotes\_gpc())  
	$data = stripslashes($data);  
  
$data = mysql\_real\_escape\_string($data);  
  
return $data;  

}

soweit so gut, nachdem ich gestern ein Multibel Textfeld eingeführt habe, kann das aufgrund der Übergabe im Array natürlich so nicht mehr funktionieren.
Gibt es vielleicht eine PHP Funktion die feststellen kann ob die Übergabe ein Array oder ein String ist? So das ich dann den Filter steuern kann?

  1. Hi!

    für unsere per POST übergebenen Daten habe ich einen kleinen Filter gebastelt:

    function filter($data) {
    $data = trim(htmlspecialchars(strip_tags($data)));

    if (get_magic_quotes_gpc())
    $data = stripslashes($data);

    $data = mysql_real_escape_string($data);

    return $data;
    }

    soweit so gut,

    Würde ich nicht behaupten. Erstens werden die Magic Quotes von PHP zuletzt hinzugefügt, sollten also zuerst entfernt werden. Dann ist es nicht sinnvoll, Daten generell und noch dazu für zwei verschiedene Ausgabemedien aufzubereiten. Es ist günstiger, solange wie möglich mit Rohdaten zu arbeiten, weil dann auch String-Funktionen wie Zeichen zählen richtig arbeiten können. Siehe: HTML in der Datenbank. Weiterhin bist du erst an der Stelle Eingabedatenverarbeitung und wirst vermutlich noch keine Verbindung zu einem MySQL-Server geöffnet haben, was aber von der Funktion mysql_real_escape_string vorausgesetzt wird. Anderenfalls öffnet sie eine Verbindung mit irgendwelchen Default-Daten.

    nachdem ich gestern ein Multibel Textfeld eingeführt habe, kann das aufgrund der Übergabe im Array natürlich so nicht mehr funktionieren.
    Gibt es vielleicht eine PHP Funktion die feststellen kann ob die Übergabe ein Array oder ein String ist? So das ich dann den Filter steuern kann?

    Natürlich, zu finden unter den Variable handling functions. Aber ich würde mir das mit der Eierlegenden-Wollmilchsau-"Filter"-Funktion noch einmal überlegen und stattdessen erst dann den jeweiligen Kontext berücksichtigen, wenn die Daten wirklich in diesen überführt werden sollen.

    Lo!

  2. Hi,

    function filter($data) {
    $data = trim(htmlspecialchars(strip_tags($data)));

    if (get_magic_quotes_gpc())
    $data = stripslashes($data);

    $data = mysql_real_escape_string($data);

    return $data;
    }

    warum das so nicht sinnvoll ist, habe ich dir neulich schon mal erklärt - und nun sag nicht, das war nicht von dir. Die exakte Übereinstimmung des Codeausschnitts einschließlich der Formatierung kann kein Zufall sein. Deshalb aus gegebenem Anlass: Bleib bei einem einmal gewählten Namen, und bleib bei einem einmal existierenden Thread zum Thema, solange er noch nicht im Archiv gelandet ist.

    Nochmal:
     * strip_tags() ist potentiell gefährlich, weil es eventuell mehr entfernt, als du willst
     * strip_tags() ist sinnlos, wenn du sowieso noch htmlspecialchars() verwendest
     * die Aufbereitung von EINGABEDATEN für den AUSGABEKONTEXT HTML ist unangebracht
     * die Aufbereitung von EINGABEDATEN für den AUSGABEKONTEXT SQL ist unangebracht

    soweit so gut, nachdem ich gestern ein Multibel Textfeld eingeführt habe

    Ein WAS?

    Gibt es vielleicht eine PHP Funktion die feststellen kann ob die Übergabe ein Array oder ein String ist? So das ich dann den Filter steuern kann?

    Ja, die beiden Funktionen sind -wer hätte das gedacht- is_array() und is_string().

    So long,
     Martin

    --
    Wenn du beim Kochen etwas heißes Wasser übrig hast, friere es ein.
    Heißes Wasser kann man immer gebrauchen.
    Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(