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é de données récupérées d'un formulaire traitées en PHP et SQL


Sujet :

Langage PHP

  1. #1
    Futur Membre du Club
    Homme Profil pro
    retraité : webmaster bénévole
    Inscrit en
    Décembre 2008
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : retraité : webmaster bénévole

    Informations forums :
    Inscription : Décembre 2008
    Messages : 11
    Points : 8
    Points
    8
    Par défaut Sécurité de données récupérées d'un formulaire traitées en PHP et SQL
    Je cherche à résoudre un problème de sécurité qui devrait être très classique mais pour lequel je ne trouve que des solutions partielles. Quelqu'un aurait-il une solution complète qui marche partout ?

    4 actions possibles :
    1) J'obtiens du texte, avec un formulaire <textarea> (il peut contenir des retours à la ligne).

    2) Je mets le contenu dans une base SQL

    3) Je récupère ce texte de la base SQL pour la remettre dans le textearea ("value") afin de le présenter à la modification

    4) Je le prends dans la base SQL pour l'afficher en HTML entre <p> et </p>

    Suivant que je suis sur mon PC (j'utilise WAMP) ou sur mon serveur (OVH), je n'obtiens pas la même chose. J'ai essayé mysql_real_escape_string et htmlspecialchars pour 1). Il semble que sur wamp, les "\" ajoutés ne passent pas dans la base alors que sur OVH ils passent. Pour les enlever, j'utilise stripslashes, mais quand il y a des "\l\n", cela enlève l'antislash et je me retrouve avec les caractères "ln" au lieu d'un retour à la ligne. J'utilise aussi nl2br pour la phase 4). Bref, je tourne en rond et il y a toujours quelque chose qui cloche !

    Merci de votre aide.

  2. #2
    Futur Membre du Club
    Homme Profil pro
    retraité : webmaster bénévole
    Inscrit en
    Décembre 2008
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : retraité : webmaster bénévole

    Informations forums :
    Inscription : Décembre 2008
    Messages : 11
    Points : 8
    Points
    8
    Par défaut Sécurité XHTML, PHP et SQL
    Je réponds à ma propre question , au moins partiellement, car cela peut intéresser d'autres personnes. J'ai trouvé dans les FAQ une réponse partielle : mon serveur WAMP a (get_magic_quotes_gpc) à 0 alors que celui de mon serveur OVH l'a à 1. Cela veut dire que ce dernier rajoute des antislash dans les GET, POST et Cookies.

    Cela étant dit, voici ma réponse à l'heure actuelle :
    1) à la sortie des POST et des GET, utiliser la fonction stripslashes pour enlever les antislashs rajoutés automatiquement si get_magic_quotes_gpc est à 1. Sinon, cela ne fait pas de mal, tout au moins si on ne s'attend pas à avoir des antislash.

    2) quand on écrit la requête SQL, on protège les données par mysql_real_escape_string : on notera que les retor à la ligne et les caractères spéciaux se retrouvent tels quels dans la base

    3) Quand on veut afficher dans le textearea, on n'a aucune précaution particulière à avoir. On prend le texte venant de la base SQL tel quel.

    4) Enfin, quand on veut afficher en HTML, on applique d'abord htmlspecialchars qui transforme en particulier les < et >, mais aussi les divers guillemets.. Puis on applique nl2br qui remplace les retour à la ligen par la balise <br />

    Si quelqu'un peut revoir ma copie...

  3. #3
    Futur Membre du Club
    Homme Profil pro
    retraité : webmaster bénévole
    Inscrit en
    Décembre 2008
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : retraité : webmaster bénévole

    Informations forums :
    Inscription : Décembre 2008
    Messages : 11
    Points : 8
    Points
    8
    Par défaut Sécurité XHTML, PHP et SQL
    Encore une fois, après essai, je corrige ma propre réponse en réécrivant tout pour une meilleure lecture :

    1) à la sortie des POST et des GET, utiliser la fonction stripslashes pour enlever les antislashs rajoutés automatiquement si get_magic_quotes_gpc est à 1. Sinon, cela ne fait pas de mal, tout au moins si on ne s'attend pas à avoir des antislash. On en profite pour appliquer htmlspecialchars de façon à ne plus avoir de "vrais" guillemets ou signes ">" et "<".

    2) quand on écrit la requête SQL, on protège les données par mysql_real_escape_string : on notera que les retour à la ligne se retrouvent tels quels dans la base. Par contre, les guillemets, < et > ont été convertis en 1). Les antislashs ajoutés par mysql_real_escape_string ne sont pas mis dans la base.

    3) Quand on veut afficher dans le textearea, on n'a aucune précaution particulière à avoir. On prend le texte venant de la base SQL tel quel. Les "<" et ">" qui auraient pu gêner (cf. ma première solution plus haut) ont été convertis par htmlspecialchars en 1)

    4) Enfin, quand on veut afficher en HTML, on applique nl2br qui remplace les retour à la ligne par la balise <br />. Les autres caractères ont été convertis en 1) avant mise dans la base SQL.

    Si quelqu'un peut revoir ma copie...

Discussions similaires

  1. Réponses: 1
    Dernier message: 11/07/2007, 08h21
  2. Réponses: 6
    Dernier message: 07/06/2007, 12h07
  3. Réponses: 2
    Dernier message: 12/04/2007, 08h55
  4. Réponses: 6
    Dernier message: 16/09/2005, 10h56
  5. Réponses: 5
    Dernier message: 27/12/2004, 00h38

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