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

EDI, CMS, Outils, Scripts et API PHP Discussion :

Cherche algo d'échappement et restitution


Sujet :

EDI, CMS, Outils, Scripts et API PHP

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 41
    Points : 30
    Points
    30
    Par défaut Cherche algo d'échappement et restitution
    Bonjour à vous et bonne année !

    Je vous explique ma situation. Je travaille sur une table d'une base de donnée qui n'a pas de clef primaire. Je dois donc faire passer la valeure d'une donnée dans .....
    - dans des variables PHP
    - des quotes ' et " de balise HTML
    - dans des variables Javascript
    - dans un POST
    - Dans une requete SQL en text
    - Peut être dans un LIKE

    Je vous avous que cette histoire me met vraiment dans la m****
    Sauriez vous comment faire ??

  2. #2
    Membre expert
    Avatar de ThomasR
    Homme Profil pro
    Directeur technique
    Inscrit en
    Décembre 2007
    Messages
    2 230
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2007
    Messages : 2 230
    Points : 3 972
    Points
    3 972
    Par défaut
    Je comprends rien à ce que tu veux dire, je vois pas pourquoi tu as besoin de "faire passer ta donnée" partout.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $ma_donnee = $_POST['mon_champ'];
    $sql = mysql_query("INSERT INTO matable VALUES('$ma_donnee')");
    Sinon...quel est ton problème ?

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 41
    Points : 30
    Points
    30
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    while($d=oci_fetch_array( $statement ))
                $retour.="<option value='$d[0]'>$d[0]</option>";
    Il suffit que $d[0] contienne une apostrophe et la donnée sera alors corrompue.

    ensuite avec si par exemple ma donnée c'est $data="truc&much=machin"
    alors si je veux l'envoyer par POST sous le nom de data, je dois envoyer data=truc&much=machin. A la réception, bien évidemment, $_POST['data'] ne vaudra que truc.

    Pour le LIKE, si j'ai un $sql="SELECT * FROM matable WHERE bidule LIKE '$motDuDebut%'

    si mot du début vaut %, il ne va pas me rechercher toute les occurences commençant par le caractère %. Encore pire, si $motDuDebut contient un ' là c'est toute la requete qui saute.

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 41
    Points : 30
    Points
    30
    Par défaut
    j'ai trouvé une partie des fonctions que je cherchais :
    urlencode pour ce qui est du POST et htmlentities pour le html.
    Pour ce qui est des requêtes sql j'ai trouvé que mysql_real_escape_string () pour l'instant mais il je ne travailles pas avec mysql

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 41
    Points : 30
    Points
    30
    Par défaut
    c'est dommage en fait, vu que c'est du coté serveur, je pourrais m'en servir (ou plutôt des fonctions inverses) que pour décoder :/

  6. #6
    Membre éclairé 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 : 42
    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
    Points : 799
    Points
    799
    Par défaut
    En général, tu as des équivalents à mysql_real_escape_string() fournis par les API des autres SGBD, cherche dans la doc ...
    Tu peux aussi utiliser PEAR avec le package MDB2 qui est une API "universelle" pour la plupart des SGBD et qui propose cette fonctionnalité, sans avoir à se préoccuper de quel SGBD on utilise (je suppose que PDO doit le faire aussi, mais je n'en suis pas sûr)

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 41
    Points : 30
    Points
    30
    Par défaut
    J'ai trouvé quelque réponse à mes questions.

    - dans une propriété de balise HTML
    => entre des quotes ' et " : il faut rajouter appliquer htmlentities à la variable avant de l'injecter entre les quotes. pour javascipt, faire ou trouver une fonction équivalente vu qu'elle n'existe pas
    - pour un POST => même problème : à partir de PHP c'est simple -> urlencode et urldecode ; javascript -> rien du tout
    - Dans une requete SQL pour une clause WHERE machin = '$a' un simple addslash() en PHP (car SQL échappe les ' avec un \ ), et rien en javascript.

    voilà

    edit: addslash ça marche pour mysql je crois, pour oracle il faut doubler les quotes pour les échapper

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 41
    Points : 30
    Points
    30
    Par défaut
    Bonjour.
    Mon problème est toujours d'actualité et je n'ai trouvé, à cette heure, aucune solution viable.
    Je suis vaiment étonné de voir que je suis le premier à qui ça pose problème.

    Je vais esssayer d'être plus clair :
    Une page en HTML+javascript transmet des info d'un formulaire en "AJAX" à une page PHP qui renvoi le résultat à la page. Pour éviter les erreurs de ce type, il me faut donc encoder comme un formulaire les infos envoyées puis les décoder. Les deux languages ont des fonctions qui échappent les caractères mais elles ne peuvent communiquées entre elles. Il s'agit des fonction urlencode/urldecode pour PHP, encodeURI/decodeURI ou encore encodeURIComponent/decodeURIComponent. Ce que je n'arrive pas à savoir c'est quelle compatibilitée a-t-on entre ces fonction pour l'échange de donnée Javascript <-> PHP

  9. #9
    Membre actif Avatar de Mogwaï
    Inscrit en
    Mai 2004
    Messages
    247
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Mai 2004
    Messages : 247
    Points : 278
    Points
    278
    Par défaut
    Tu n'es pas le premier à être confronté aux problèmes d'échappement/encodage de caractères spéciaux.

    Mélanger Javascript, PHP et MySql est également habituel.

    Maintenant, très concrètement, quel est ton problème ?
    As-tu des exemples de cas où tu as eu un problème ?
    Etre à son compte, y'a rien de mieux !

  10. #10
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 41
    Points : 30
    Points
    30
    Par défaut
    concretement voilà l'état et le chemin de la valeure :

    Etat 1
    dans une page HTML, encodée par (PHP)HTMLentities.

    Etat 2
    récuperé par Javascript

    Etat 3 manquant
    encodé pour le POST

    Etat 4
    concaténé avec d'autre valeures qui ont subit le même traitement qu'elle, dans une chaine du type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "nom=".val1."&prenom=".val2"&...="... etc...
    Etat 5
    la chaine est envoyée en POST à ma page PHP de traitement, donc l'affichage sera récuperé (à la fin de son execution) pour être injecté dans la page HTML courante par Javascript (de l'AJAX sans XML)

    Etat 6
    Du POST, la chaine est décodée et redécomposée en variables par de simple $_POST['nomVariable'] (logiquement la valeure de la variable est décodée telle que me ferait (PHP)urldecode())

    Etat 7
    (PHP)html_entities_decode(maVariable) me restitu le texte souhaité

    Etat 8 - 0
    le traitement est effectué, d'autre variable sont encodée par (PHP)html_entities() et renvoyé à la page HTML, fins prêts pour faire un autre tour

  11. #11
    Membre actif Avatar de Mogwaï
    Inscrit en
    Mai 2004
    Messages
    247
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Mai 2004
    Messages : 247
    Points : 278
    Points
    278
    Par défaut
    Si je comprends bien, c'est pour l'étape 3 que tu souhaites des éclaircissements ?
    Etre à son compte, y'a rien de mieux !

  12. #12
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 41
    Points : 30
    Points
    30
    Par défaut
    exactement, j'ai trouvé les fonctions encodeURI et encodeURIComponent en Javascript. Mais, malgrés mes recherches, je n'ai aucune certitude quant à la compatibilitée de l'une de ces fonction avec le "POST"décodage de PHP.
    Si vous en savez plus, je vous serais reconnaissant de m'éclairé sur la question. merci

  13. #13
    Membre actif Avatar de Mogwaï
    Inscrit en
    Mai 2004
    Messages
    247
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Mai 2004
    Messages : 247
    Points : 278
    Points
    278
    Par défaut
    encodeURIComponent fait très bien ce travail et te permettra de récupérer le contenu original des variables grâce à PHP.

    http://developer.mozilla.org/fr/docs...deURIComponent
    Etre à son compte, y'a rien de mieux !

  14. #14
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 41
    Points : 30
    Points
    30
    Par défaut
    Merci pour votre conseil.
    Cette fonction marche. Esperont que ce soit bien pour tout les cas.

    Encore merci

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

Discussions similaires

  1. CRC32 bit cherche algo
    Par ..::snake::.. dans le forum Algorithmes et structures de données
    Réponses: 6
    Dernier message: 27/06/2007, 20h18
  2. Cherche algo de mouvement de stock
    Par vincent1 dans le forum C++
    Réponses: 2
    Dernier message: 27/05/2005, 11h47
  3. Cherche algo de cryptographie
    Par Oberown dans le forum Algorithmes et structures de données
    Réponses: 12
    Dernier message: 16/09/2004, 09h02
  4. cherche algos encryption en RSA et ELGAMAL
    Par Vermin dans le forum Algorithmes et structures de données
    Réponses: 2
    Dernier message: 04/11/2002, 08h58
  5. cherche algos Delphi pour : Huffman, R.S.A, D.E.S.
    Par X-Delphi dans le forum Débuter
    Réponses: 3
    Dernier message: 24/08/2002, 18h51

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