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 :

Filtrer les variables


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Webmaster
    Inscrit en
    Janvier 2016
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Janvier 2016
    Messages : 12
    Par défaut Filtrer les variables
    Bonjour,

    Pour sécuriser les données que mes visiteurs envoient j'utilise la preg ci-dessous pour filtrer (pas les valider) leurs variables :

    Pour les emails :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $email = preg_replace("#[^0-9a-zA-Z@._\-]#","",strtolower($_POST['email']));
    Pour les variable alpha numérique avec accent :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $prenom=preg_replace("#[^0-9a-zA-Z-_.!?;:ÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËèéêëÇçÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ ']#","",$_POST['prenom']);
    Et par exemple avec un GET qui est sensé avoir que des chiffres je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $chiffre=preg_replace("#[^0-9]#","",$_GET['chiffre']);
    Ca fonctionne bien.
    Ma question est la suivante : est-ce qu'il y a un moyen plus léger en resource CPU pour faire la même chose que scanner la variable entière avec un preg_replace ?

  2. #2
    Expert confirmé
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Billets dans le blog
    12
    Par défaut
    Salut,

    Holàààà ! Halte-là ! Démarre donc bien l'année 2016 s'il te plait et va lire la doc de la fonction filter_var() qui va pour le coup devenir ta meilleure amie

  3. #3
    Membre averti
    Homme Profil pro
    Webmaster
    Inscrit en
    Janvier 2016
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Janvier 2016
    Messages : 12
    Par défaut
    Bonjour,

    Merci pour la réponse.
    Effectivement je viens de voir qu'il y a un filtre FILTER_SANITIZE_EMAIL donc ca déjà c'est génial merci !

    Par contre je vois rien pour l'aphanumérique avec accent, y a même rien pour l'alpha numérique tout court, c'est dommage je trouve.
    Du coup pour filtrer les variable de type prénom obligé de faire du preg ?

  4. #4
    Expert confirmé
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Billets dans le blog
    12
    Par défaut
    Pour l'alphanumérique : ctype_alnum()
    Après pour ce qui est des accents, tu peux faire effectivement du regex, mais il est aussi possible de remplacer tous les caractères spéciaux par une chaîne vide (str_replace) et vérifier que ce qui reste correspond à de l'alphanumérique. Si le test renvoie false alors c'est qu'il reste des caractères exotiques.

  5. #5
    Membre averti
    Homme Profil pro
    Webmaster
    Inscrit en
    Janvier 2016
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Janvier 2016
    Messages : 12
    Par défaut
    Bon j'ai fais un test rapide avec le code ci-dessous si ca intéresse quelqu'un, systèmatiquement FILTER_SANITIZE_EMAIL est plus rapide à exécuté que le preg_replace, donc ca c'est une bonne nouvelle

    La mauvaise nouvelle c'est que FILTER_SANITIZE_EMAIL accepte des caractères qui sont quasiment ( pour pas dire jamais ) utilisé dans un email, je suppose que ca suit une norme RFC quelconque, mais par exemple ca accepte !#$%&'*+-=?^_`{|}~@.[] , perso je considère que quelqu'un qui mets un ! ou un # dans son adresse email a un gros doigt et à fait une faute de frappe, et je parle même pas de { }

    En plus de ca t'as de grande chance que si t'utilise cet email ca n'arrive jamais à son destinataire. C'est a mon humble avis une très mauvaise idée d'accepter qu'un visiteur ajoute des ! ou des ^ dans son adresse email.

    C'est dommage parce que sur le papier c'est génial FILTER_SANITIZE_EMAIL mais c'est inutilisable je trouve !

    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
    $email_bidon="sds!/dsd@sdsosdosdoisdisdoo010928129812981928198298128982mpdoILKID1ù^$*ù^$!:mloKIUZEEZZEEZZEEZEZZEdsd.c om)";
     
    $timestart=microtime(true);
    $email=strtolower(filter_var($email_bidon, FILTER_SANITIZE_EMAIL));
    $timeend=microtime(true);
    $time=$timeend-$timestart;
    $page_load_time1 = number_format($time, 15);
     
    echo "$email <br>$page_load_time";
    echo"<br><br><br><br><br><br><br>";
     
     
    $timestart=microtime(true);
    $email = preg_replace("#[^0-9a-zA-Z@._\-]#","",strtolower($email_bidon));
    $timeend=microtime(true);
    $time=$timeend-$timestart;
    $page_load_time2 = number_format($time, 15);
     
    echo "$email<br> $page_load_time";
    echo"<br><br><br><br><br><br><br>";
     
     
    if($page_load_time2>$page_load_time1)
    {
    	echo"preg_replace plus long";
    }
    else
    {
    	echo"filter_var plus long";
    }

  6. #6
    Expert confirmé
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Billets dans le blog
    12
    Par défaut
    Salut, pour les emails, il me semble que la norme c'est la RFC 822

Discussions similaires

  1. Réponses: 3
    Dernier message: 06/05/2006, 23h07
  2. peut on filtrer les adresses IP ?
    Par travail dans le forum 4D
    Réponses: 2
    Dernier message: 04/06/2003, 14h16
  3. [syntaxe] Gerer les variables dans une requete
    Par rastapopulos dans le forum MS SQL Server
    Réponses: 12
    Dernier message: 15/04/2003, 12h53
  4. [XSLT] les variables???
    Par Lydiane dans le forum XSL/XSLT/XPATH
    Réponses: 11
    Dernier message: 09/08/2002, 16h17
  5. les variables globales static
    Par gRRosminet dans le forum C
    Réponses: 8
    Dernier message: 27/04/2002, 08h34

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