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é] Comment sécuriser un champ textarea ?


Sujet :

Langage PHP

Vue hybride

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

    Informations forums :
    Inscription : Juin 2006
    Messages : 531
    Par défaut [Sécurité] Comment sécuriser un champ textarea ?
    Bonjour,

    Je dois sécuriser un formulaire.
    Pour certains champs je sais le type de données attendues, donc c'est très bien j'utilise les expregs.
    Mais pour le textarea, je ne sais pas ce que l'on peut m'envoyer et je ne peux pas interdire de caractères.

    Donc comment le filtrer au mieux ?
    Je peux faire ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    htmlentities(mysql_real_escape_string($textarea))
    Mais est-ce suffisant et sinon que faire d'autre ?

    Merci de votre aide

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    79
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 79
    Par défaut
    Salut,

    tu veux le sécuriser contre quoi (certains mots,...) ?

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

    Informations forums :
    Inscription : Juin 2006
    Messages : 531
    Par défaut
    Non contre les attaques xss, injections sql et autres joyeusetés. Les mots doivent rester libres et je ne peux pas bloquer les caractères spéciaux.

  4. #4
    Membre Expert

    Homme Profil pro
    Inscrit en
    Janvier 2004
    Messages
    1 249
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 1 249
    Par défaut
    alors...

    si tu veux faire un bon filtrage :

    1)
    * Verifier en php le reglage des magicquotes (avec get_magic_quotes_gpc())
    * Si activé alors stripslashes sur la variable

    => Tu obtiens dorenavant un champ qui correspond exactement a ce que l'utilisateur a tapé !!

    Ensuite, le traitement a faire depend de l'utilisation :

    2)
    * pour inserer dans une base de données :
    mysql_real_escape_string
    * pour afficher sous forme de texte :
    htmlentities
    * pour afficher dans un value de formulaire ou un autre attribut d'une balise html :
    addslashes

    Ensuite, ton traitement est sécurisé... a condition que :
    * dans toutes les requetes qui travaillent sur le champs utilisé pour stocker l'info tu utilise des quotes autour du champs : SELECT ... champ = '$champ', etc...
    * chaque fois que tu récupere l'info depuis la base, tu dois refaire le traitement en fonction de l'utilisation a partir du point 2

    Dans la pratique, je te conseille de tester TOUT tes champs avec le crash test suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    a'a"a/a\a<b>a</b>a<br>a
    si cette chaine se réaffiche exactement telle qu'elle a été tapée partout sans faire aucune erreur, il y a de grande chance que ton code soit a peu pres correct ;o)
    (et quand je dis exactement, c'est exactement ! pas de \ en trop, pas de \ en moins, pas de "a" en gras ou de retour chariot interprété avec <br>, et les tests sont a faire en affichage, creation, modification et suppression de ton objet)

    Je crois que j'ai fait le tour, j'ai oublié qqchose ? ;o))

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    531
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 531
    Par défaut
    salut Fladnag, merci pour cette réponse complète.

    Alors une question déjà :

    Ensuite, ton traitement est sécurisé... a condition que :
    * dans toutes les requetes qui travaillent sur le champs utilisé pour stocker l'info tu utilise des quotes autour du champs : SELECT ... champ = '$champ', etc...
    Je fais ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT...champ='.$champ.'
    ça revient au même, qu'est ce que t'en pense ? Et au fait, pourquoi les quotes sont un support contre les injections sql ?

    Sur un autre post, j'ai lu cette phrase :
    D'ailleurs, faire un "mysql_real_escape_string" sur une variable placé directement dans une requête sans apostrophe n'empêche pas le "piratage".
    ça semble confirmer. Mais alors pourquoi mysql_real_escape_string() + apostrophes dans la requête = sécurité et pourquoi sans les apostrophes ça ne l'est plus ?

  6. #6
    Membre Expert

    Homme Profil pro
    Inscrit en
    Janvier 2004
    Messages
    1 249
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 1 249
    Par défaut
    Citation Envoyé par JackBeauregard
    Je fais ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT...champ='.$champ.'
    ça revient au même, qu'est ce que t'en pense ? Et au fait, pourquoi les quotes sont un support contre les injections sql ?
    C'est justement ce qu'il faut eviter ;o)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT ... champ=\''.$champ.'\'....
    ou 
    SELECT ... champ='".$champ."'...
    est correct.

    ta requete va construire :
    donc imaginons une requete :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM membres WHERE login=$login AND password=$password
    maintenant, je rentre comme login : $login="admin--"

    la requete devient :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM membres WHERE login=admin-- AND password=
    manque de bol pour toi, -- veux dire que le reste de la ligne de la requete SQL est un commentaire... donc on ne fait aucune verification sur le mot de passe !

    Si tu met des quotes, tu obtient comme requete :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM membres WHERE login='admin--' AND password=''
    et là mysql va bien comprendre que c'est la chaine "admin--" qu'il faut verifier.

    Ce n'est qu'un exemple de ce qui est possible. Si le sujet t'interesse, je te conseille de lire les articles sur l'injection sql disponible sur ce site : http://www.phpsecure.info/v2/zone/pArticle
    ce n'est pas un panel exhaustif de ce qui est possible, mais c'est une tres bonne introduction, et ca permet en principe de se rendre compte de la fragilité d'un script php mal codé ;o)

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 23/08/2014, 17h08
  2. Réponses: 2
    Dernier message: 18/05/2010, 20h03
  3. Comment renommer un champ avec Module BD?
    Par technico dans le forum Bases de données
    Réponses: 4
    Dernier message: 27/01/2004, 21h24
  4. [CR] Comment trouver un champs dans un report ??
    Par Madduck dans le forum SAP Crystal Reports
    Réponses: 4
    Dernier message: 18/09/2003, 08h31
  5. [langage] Comment rajouter des champs dans une liste
    Par toto_titi dans le forum Langage
    Réponses: 4
    Dernier message: 28/08/2003, 14h09

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