IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

[Sécurité] Nettoyage de données


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 24
    Par défaut [Sécurité] Nettoyage de données
    Bonjour,

    J'aurais voulu connaitre votre avis sur ma fonction.
    Est-ce inutile, trop lourd ,...., génial ;-)

    C'est une fonction qui controle les variables des tableaux de POST et GET
    mes variables sont notées avec des prefixes : int_, id_,...


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
     function clean_data(){
        foreach($_REQUEST as $key=>$var) {
            if(!is_array($var)){
                // recuperation du nom de la variable
                $type_var = explode("_", $key);
                switch ($type_var[0]){
                    // entier 
                    case "int":
                        $clean_var = sanitize($var, INT);
                    break;
     
                    // entier 
                    case "id":
                        $clean_var = sanitize($var, INT);
                    break;
     
                    // chaine de caratère 
                    case "str":
                        $clean_var = sanitize($var, HTML);
                    break;        
     
                    // entier floatant
                    case "float":
                        $clean_var = sanitize($var, FLOAT);
                    break;
     
                    // si non classé = mode paranoïa ;-)
                    default:
                        $clean_var = sanitize($var, PARANOID);
                }
            }
     
            $clean_var = sanitize($clean_var, SQL);
     
            if(isset($_POST[$key])){
                $_POST[$key]=$clean_var;
                echo "Post";
            }
     
            if(isset($_GET[$key])){
                $_GET[$key]=$clean_var;
                echo "get";
            }
        }    
    }

    J'utilise une bibliothèque pour nettoyer les données
    * Open Web Application Security Project
    * (http://www.owasp.org)

  2. #2
    Membre émérite Avatar de Hervé Saladin
    Homme Profil pro
    Ingénieur d'études en développement et déploiement d'applications
    Inscrit en
    Décembre 2004
    Messages
    647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur d'études en développement et déploiement d'applications
    Secteur : Service public

    Informations forums :
    Inscription : Décembre 2004
    Messages : 647
    Par défaut
    Salut,
    inutile ? certainement pas si tu as un minimum de sécurité à assurer.
    trop lourd ? difficile à dire, faudrait voir le code de la fonction sanitize() (j'avoue que j'ai pas eu le courage de chercher), et puis tout dépend des capacités du serveur, de la charge qu'il supporte etc ...
    génial ? euh, non quand même pas
    D'une façon générale, c'est cela ou quelque chose de très similaire que tout développeur web devrait faire pour toutes ses applis PHP, ASP etc : vérifier les parametres GET et POST, les cookies etc ... afin d'éviter les mauvaises surprises.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 24
    Par défaut
    Ok merci, ca me rassure.

    Pour la fonction si tu veux je te l'envoie demain, mais grosso modo c'est de l'expression regulière.

    Pour les attaques Xss y a t'il d'autre données transmises qu'il faudrait filtrées ?, les sessions et cookies sont-ils une "menace" aussi ?

  4. #4
    Membre émérite Avatar de Hervé Saladin
    Homme Profil pro
    Ingénieur d'études en développement et déploiement d'applications
    Inscrit en
    Décembre 2004
    Messages
    647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur d'études en développement et déploiement d'applications
    Secteur : Service public

    Informations forums :
    Inscription : Décembre 2004
    Messages : 647
    Par défaut
    Toute donnée ne provenant pas de tes scripts ou de ta base de donnée doit être vérifiée.
    Pour être le plus tranquille possible, il faut échapper les caractères spéciaux (guillemets, quotes, & cie), et aussi proscrire les mots-clés SQL (tous), et plus généralement tout ce qui n'a rien à faire dans la requete HTTP.
    Si tu veux être paranoïaque (ce qui n'est pas forcément incensé), le mieux est encore de faire une expression réguliere très restrictive pour chaque parametre (ou chaque type de parametre) à laquelle le parametre en question doit correspondre et si il ne correspond pas, tu ne le traite pas ou tu donne un message d'erreur à l'utilisateur.

    Typiquement : tous les parametres passés dans la requete HTTP (données de formulaire, cookies) doivent être passés au crible.
    Donc OUI les cookies doivet êtres vérifiés, car ils sont transmis dans la requête HTTP au serveur par le navigateur client, au même titre qu'un paramètre GET ou POST, donc un hacker qui modifierait lui-même les cookies sur son ordi pourrait exploiter exactement les mêmes vulnérabilités.

    Par contre, les variables de session ne présentent pas de risque en elles-mêmes car elles ne sont crées, stockées et traitées que sur le serveur, le client n'a aucune prise dessus.

    Enfin, saches qu'il existe des outils destinés à verifier la sécurité de tes scripts CGI (PHP, ASP, Perl, Java etc ...).
    Comme tous les outils de sécurité, c'est à double tranchant (tout dépend l'objectif pour lequel on s'en sert), aussi je n'en citerais pas ici, mais je te fais confiance pour trouver toi même et en faire bon usage

    Bon, je sais que là j'ai l'air d'un parano qui voit des hackers et des failles de sécurité partout, mais je peux t'assurer que c'est pas du luxe d'être prudent. J'en ai eu la douloureuse experience y'a pas très longtemps : hack d'un serveur, avec installation de portes dérobées, défacement d'un site, et utilisation du serveur comme relai pour des attaques (D?)DOS .... tout ça à cause d'une appli ASP vulnérable aux injections SQL (pourtant cette appli avait été développée par une SSII serieuse, pas par le petit stagiaire de 1ere année).
    Bref, une bonne semaine de décortiquage de fichiers de logs et de rebouchage des failles

    Devant la multiplication des sites et des applis web, ce genre d'attaque est en train de devenir de plus en plus répandue, voir peut-être même le risque n°1 pour les entreprises et les administrations !

  5. #5
    Membre émérite
    Avatar de kankrelune
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    763
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 763
    Par défaut
    Moi je suis plus mitigé... .. .

    Tout dépend de la configuration du serveur (register_global on/off) et de ta façon de coder... .. .

    Par contre je vois aux moins deux erreurs dans ta fonction...

    1 si $var n'est pas un tableau tu la passe dans sanitize... bien... mais si c'est un tableau ? d'ailleurs si c'est un tableau tu doit avoir une notice car $clean_var n'est pas encore déclarée... .. .

    2
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
           if(isset($_POST[$key])){
                $_POST[$key]=$clean_var;
                echo "Post";
            }
     
            if(isset($_GET[$key])){
                $_GET[$key]=$clean_var;
                echo "get";
            }

    tu oublis les cookies ($_REQUEST étant un tableau associatif regroupant $_GET, $_POST et $_COOKIE)

    Pour le reste il faudrait regarder la fonction sanitize... utiliser une regexp me parait un peu lourd comme traitement après faut voir comment c'est fait... et puis la sécurité à un "cout"... .. .

    @ tchaOo°

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 24
    Par défaut Sanitize
    Moi je prefere etre parano ;-)

    Voila par exemple le nettoyage pour les chaines sql

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    function sanitize_sql_string($string, $min='', $max='')
    {
      $string = nice_addslashes($string); //gz
      $pattern = "/;/"; // jp
      $replacement = "";
      $len = strlen($string);
      if((($min != '') && ($len < $min)) || (($max != '') && ($len > $max)))
        return FALSE;
      return preg_replace($pattern, $replacement, $string);
    }

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Sécurité] sécuriser les données d'un site
    Par lodan dans le forum Langage
    Réponses: 10
    Dernier message: 20/07/2006, 12h26
  2. Réponses: 10
    Dernier message: 21/06/2006, 14h50
  3. [Sécurité] controle des données
    Par nath-0-0 dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 31/05/2006, 14h04
  4. [Sécurité] Crypter des données
    Par 12_darte_12 dans le forum Langage
    Réponses: 1
    Dernier message: 26/05/2006, 12h33
  5. [Sécurité] Verrouillage des données
    Par Maglight dans le forum Oracle
    Réponses: 1
    Dernier message: 06/01/2006, 19h45

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo