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 :

scripts de securisation


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    74
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 74
    Points : 56
    Points
    56
    Par défaut scripts de securisation
    Salut a tous et a toutes,
    j'ai entrepris la conception d'un scripte a utilisé comme base de chacun de mes projet.
    Alors pour le tester, quoi de mieux que de demander de l'aide a plusieurs communautés.

    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
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    <?php
    /* ----------
     * Beta 1.0 -
     * ----------
     * Merci aux personnes qui m'ont permi
     * de prendre consiance de mes erreurs
     * et leur divers aides :
     * ----------
     * www.developpez.net
     * www.newbiecontest.org
    ---------- */
     
     
    // Filtres de nettoyage
    function filtre_nettoyage($valeur)
    {
        $valeur = trim($valeur);
        $valeur = htmlentities($valeur, ENT_QUOTES);
        // $valeur = strip_tags($valeur); // SHOULD -- You never know
        return $valeur;
    }
     
    // Filtre pour fichier
    function filtre_fichier($valeur, $chemin)
    {
        $chemin = dirname(__FILE__).$chemin;
     
        if(!strstr($valeur, ".."))
        {
            if(!file_exists($chemin))
            {
                echo "Erreur : Le fichier demandé n'existe pas ou n'est pas autorisé !";
                exit();
            }
            else
            {
                return $valeur;
            }
        }
        else
        {
            echo "Erreur : Tentative interdite !";
            exit();
        }
    }
     
    // Filtre pour shell (use filtre_nshell($valeur, TRUE | FALSE))
    function filtre_nshell($valeur, $chaine)
    {
        if($chaine)
        {
            $valeur = escapeshellarg($valeur);
        }
        else
        {
            $valeur = escapeshellcmd($valeur);
        }
     
        return $valeur;
    }
     
    // Parseur de securisation
    function parse_secur($parseCode) 
    {
     
        if (is_array($parseCode))
        {
            foreach ($parseCode as $clef => $valeur)
            {
                $valeur = filtre_nettoyage($valeur);
                $parseCode[$clef] = utf8_enc($valeur);
            }
        }
        else
        {
            $parseCode = filtre_nettoyage($parseCode);
            $parseCode = utf8_enc($parseCode);
        }
     
        return $parseCode;
    }
     
    // Verif email/url/ipv4/ipv6
    function parse_verif($valeur)
    {
        $parseCode = filtre_nettoyage($valeur);
     
        if(filter_input($parseCode, FILTER_VALIDATE_EMAIL))
        {  
            $parseCode = filter_var($parseCode, FILTER_SANITIZE_EMAIL);
        }
        elseif(filter_input($parseCode, FILTER_VALIDATE_URL))
        {
            $parseCode = filter_var($parseCode, FILTER_SANITIZE_ENCODED);
        }
        elseif(filter_input($parseCode, FILTER_VALIDATE_IP, FILTER_FLAG_NO_PRIV_RANGE)) {}
        else {$erreur = false;}
     
        if(!isset($erreur))
        {
            return $parseCode;
        }
        else {echo 'Les argument passé ne sont pas valides';}
    }
     
    // Function debug
    function mod_debug($valeur)
    {
        echo '<br />';
        var_dump($valeur);
        $memUse = round((memory_get_usage()/1024)/1024, 2);
        echo '<br />',$memUse,' / Mo.';
    }
    Un "strip_tags" est présent en plus d'un "htmlentities", car j'avais croisé un détournement possible du "htmlentities" corrigé comme cela. Mais impossible de retrouver ce sujet ...
    Je ne suis pas persuadé du point de vue pertinent de "utf8_enc" vue qu'il est aussi présent avec le "htmlentities".

    Le tout n'est pas codé en Objet, c'est un chois personnel. Mais si vous avez des indications sur un réel besoin de l'utilisation d'Objet sur ce genre de projet. Je suis tout ouie

    Des retours, des corrections ?
    Merci.

    PS : Mini projet en alpha au quel viendras s'ajouter du hash et cryptage.

    Remarques retenue :
    - Faille dans le filtre shell pour ";" => remède trouvé pour ça "escapeshellcmd"
    - Faille dans "fichier" si chemin non dev => corrigé avec "dirname(__FILE__)"
    - "ENT_IGNORE" est déprécié (dangereux)
    - "strip_tags" inutile a son emplacement, retrait ou mod pour "allowable_tags"
    - Retrais du force UTF-8 de htmlentities, conservation de "utf8_enc" a la place

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Il faudrait que tu nous décrives le but de chaque fonction.

    utf8_enc() est une fonction maison ?

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    - htmlentities()
    ENT_IGNORE
    Ignore les séquences de caractères invalides plutôt que de retourner une chaine vide. L'utilisation de ce drapeau est fortement déconseillée pour des » raisons de sécurité.
    - strip_tags() n'aura aucun effet après htmlentities, puisque les < et > seront transformés en &lt ; et &gt ;.
    On peut par contre le mettre avant, et aussi indiquer les allowable_tags.
    Il est surtout utile pour les <textarea>.

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    74
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 74
    Points : 56
    Points
    56
    Par défaut
    utf8_enc() est la fonction php, le script présent est "complet", sinon j'aurais ajouter les autres pages.

    ---

    J'ai ajouter tes remarques da la liste.
    On m'avais deja fait remarqué "ENT_IGNORE", je ne vois pas ce qui m'avais poussé a l'ajouter ... c'est idiot de ma part.

  5. #5
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    utf8_enc() est la fonction php
    Certes, mais elle sort d'où cette fonction ?

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    74
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 74
    Points : 56
    Points
    56
    Par défaut
    Ha non pardons, c'est moi ...
    Comme je le disais, ce petit projet avait débuter il y a un moment. (puis oublié)
    utf8_encode est la fonction php et non pas utf8_enc qui vérifie juste l'encodage

    j'avais oublié une minmini page :
    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
    <?php
    // Verification de l'UTF8
    function utf8_enc($valeur)
    {
        if(mb_detect_encoding($valeur) != "UTF-8")
        {
            $result = utf8_encode($valeur);
        }
        else
        {
            $result = $valeur;
        }
     
        return $result;
    }

Discussions similaires

  1. Quel est le meilleur script PHP de portail (CMS) ?
    Par Lana.Bauer dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 187
    Dernier message: 18/10/2012, 08h45
  2. [MySQL] Sécuriser mon script de connexion à la bd
    Par cyrilherve dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 04/05/2009, 11h17
  3. securiser ajout script sur un site
    Par calitom dans le forum Général Conception Web
    Réponses: 4
    Dernier message: 04/01/2009, 22h17
  4. Réponses: 9
    Dernier message: 05/01/2006, 13h24

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