ilch Forum » Ilch Clan 1.1 » Allgemein » variablen überprüfung leicht gemacht

Geschlossen
  1. #1
    User Pic
    sCoRpIoN Mitglied
    Registriert seit
    03.03.2005
    Beiträge
    1.883
    Beitragswertungen
    0 Beitragspunkte
    tach leute,

    da ich gerade das backend von nem onlineshop umschreibe, wollte ich mal ein recht allgemeines problem ansprechen:
    die überprüfung von variablen bzw. arrays, welche von formularen übergeben werden;

    folgende problemstellung:
    ein formular, mit sagen wir mal 5 eingabefeldern (sehr einfaches formular mit nur 5 feldern), wird abgesendet;
    das ziel ist ein php-skript, welches mit den variablen diverse aktionen durchführen soll;

    nun zum problem: es gilt generell vor beginn jeglicher aktion das übergebene $_GET- bzw. $_POST-Array grob von möglichen schädlingen zu reinigen und es für evtl. abfragen vorzubereiten.

    hierzu findet man sehr häufig folgenden lösungsansatz:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    // Variablen Deklaration
     
    if (!isset($_POST['kategorie']))    $_POST['kategorie'] = "";
    if (!isset($_POST['name_k']))       $_POST['name_k'] = "";
    if (!isset($_POST['main_name']))    $_POST['main_name'] = "";
    if (!isset($_POST['sort']))         $_POST['sort'] = "";
    if (!isset($_POST['start']))        $_POST['start'] = "";
     
    $_POST['neu_kategorie']     = htmlentities($_POST['neu_kategorie'],ENT_QUOTES,'utf-8');
    $_POST['neu_artikelnummer'] = htmlentities($_POST['neu_artikelnummer'],ENT_QUOTES,'utf-8');
    $_POST['neu_name']          = htmlentities($_POST['neu_name'],ENT_QUOTES,'utf-8');
    $_POST['neu_beschreibung']  = htmlentities($_POST['neu_beschreibung'],ENT_QUOTES,'utf-8');
    $_POST['neu_preis']         = htmlentities($_POST['neu_preis'],ENT_QUOTES,'utf-8');


    das obige listing kann sich bei zunehmender anzahl von variablen und konstrollstrukturen natürlich drastisch vergrößern;

    da ja jeder programmierer generell schreibfaul ist, hier nun mein kleiner ansatz zur problemlösung:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    // Variablen Deklaration
     
    foreach ($_POST as $postkey => $postvalue){
        if (!isset($postkey)){
            $_POST[$postkey] = "";
        }else{
            htmlentities($_POST[$postkey],ENT_QUOTES,'utf-8');
        }
    }


    analog natürlich erweiterbar mit diversen weiteren validierungsfunktionen.


    nun würde mich speziell noch interessieren, was ihr von einer solchen umsetzung haltet?


    gruss
    scorp

    betroffene Homepage: externer Link
    free-design: externer Link

    --## externer Link ##--
    0 Mitglieder finden den Beitrag gut.
  2. #2
    User Pic
    Mairu Coder
    Registriert seit
    16.06.2006
    Beiträge
    15.334
    Beitragswertungen
    387 Beitragspunkte
    Ich hab mir einiger Zeit auch mal solche Hilfsfunktionen geschrieben, allerdings auf Basis von ilch ->


    Ist gleich noch mit zum Eintragen in die Datenbank, was man ja meistens mit Formularfeldern macht.
    Und auch immer mal ein Blick auf die FAQ werfen. | Mairus Ilchseite
    0 Mitglieder finden den Beitrag gut.
  3. #3
    User Pic
    sCoRpIoN Mitglied
    Registriert seit
    03.03.2005
    Beiträge
    1.883
    Beitragswertungen
    0 Beitragspunkte
    jo auch sehr nett;
    für das db-eintragen hab ich mir allerdings auch schon seit langem ne schöne db_layer_klasse erstellt; von der ich alle benötigten child_klassen erben lasse.
    ist für meine fälle leichter wartbar, da ich hier meist nur die db_layer_klasse bearbeiten brauche.

    achja, es gibt soviel was man alles tun könnte, wenn man nur nicht so faul wäre lachen

    eine sehr nette und hilfreiche klasse verbirgt sich hier:
    PHPInputFilter
    phpclasses.php-start.de/browse/package/2189.html

    gruss
    scorp
    free-design: externer Link

    --## externer Link ##--
    0 Mitglieder finden den Beitrag gut.
  4. #4
    User Pic
    Nero Hall Of Fame
    Registriert seit
    12.11.2005
    Beiträge
    987
    Beitragswertungen
    0 Beitragspunkte
    hm... wäre evt. auch nicht verkehrt wenn man ein framework benützen würde.

    Hier mal eine Funktion welche ich bei meinem CMS (Ableger von ilch-CMS) benutze für das escapen von Inhalten in einem $_POST, $_GET oder was auch immer für ein array zwinker.



    das benützen der funktion escape_arrays() ist ansich recht einfach:
    1
    2
    3
    4
    5
    6
    7
    foreach($_POST['install'] as $k=>$v){
      $insert = escape_arrays($_POST,array('name'=>'str&tpl', 'path'=>'str&tpl','loc'=>''),$k);
      $insert['id'] = escape($v,'integer');
      if (0==db_count_query("SELECT COUNT(id) FROM `prefix_module` WHERE (path = '{$insert['path']}' OR name = '{$insert['name']}') AND loc = {$insert['loc']}")){
        db_query("INSERT INTO `prefix_module` (name,path,loc) VALUES ('{$insert['name']}','{$insert['path']}',{$insert['loc']})");
      }
    }


    oder

    1
    $insert = escape_arrays($_POST,array('name'=>'str&tpl', 'email'=>'str&tpl', 'lang'=>'str&tpl', 'recht'=>'', 'grp'=>''));


    Mfg Nero


    Zuletzt modifiziert von Nero am 19.02.2008 - 22:16:14
    ilch-Portal coming soon lachen

    0 Mitglieder finden den Beitrag gut.
  5. #5
    User Pic
    sCoRpIoN Mitglied
    Registriert seit
    03.03.2005
    Beiträge
    1.883
    Beitragswertungen
    0 Beitragspunkte
    wobei der einsatz von magic_quotes an sich keine wirkliche sicherheit bietet; hierzu auch folgendes buch empfehlenswert:
    externer Link

    gruss
    scorp


    Zuletzt modifiziert von sCoRpIoN am 19.02.2008 - 22:19:34
    free-design: externer Link

    --## externer Link ##--
    0 Mitglieder finden den Beitrag gut.
Geschlossen

Zurück zu Allgemein

Optionen: Bei einer Antwort zu diesem Thema eine eMail erhalten