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écurisation de formulaire


Sujet :

Langage PHP

  1. #1
    Membre confirmé
    Inscrit en
    Février 2008
    Messages
    190
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 190
    Par défaut Sécurisation de formulaire
    Bonjour à tous,

    bon je pense qu'on va me dire qu'on retrouve ce sujet ailleurs sur le forum etc... Mais si je met quand même ce post c'est une, pour être sûr de ce que je fais et deux, pour avoir quelques réponses à mes questions.

    Car après avoir écumé Forum et bouquin je voudrais être certains d'avoir compris (ou pas).

    Donc, j'ai un formulaire qui demande le Nom, Prénom de la personne ainsi que d'autres informations.

    J'ai aussi des champs, 'téléphone', 'bureau', etc... Eux je pense que ce n'est pas la peine de les protéger vu qu'avec du Javascript j'ai limité l'entrée uniquement aux chiffres.

    Le charset utilisé est UTF-8.

    Voici mon code pour le champ prénom :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    $prenom = $_SESSION['prenom'];
    $prenom=utf8_decode($prenom);
    $prenom=addslashes($prenom);
    $prenom=htmlentities($prenom);
    $prenom=utf8_encode($prenom);
    $prenom=trim($prenom);
    Donc, si j'ai bien compris le addslashes, c'est pour protéger les caractères (comme les ') en vue d'être enregistré dans une base de données. Ce qui n'est pas le cas encore mais le sera très prochainement.

    htmlentities, pour éviter de prendre en compte les balises HTML.

    trim, enlève certains caractères comme les retours chariots.

    Par contre je ne comprends pas l'usage des utf8_decode et utf8_encode.
    Si je ne met pas ça dans mon code, les caractères accentués ne passent pas.

    Voilà, merci de m'orienter, de me confirmer (ou infirmer) ce que j'ai écris et si j'ai oublié quelque chose pour la sécurité, merci aussi de m'en faire part.

    Bonne journée.

  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
    Par défaut
    Eux je pense que ce n'est pas la peine de les protéger vu qu'avec du Javascript j'ai limité l'entrée
    Javascript ne peut servir que comme aide a la saisie mais pas comme protection : un utilisateur qui a desactivé le javascript pourra saisir n'importe quoi dans ton formulaire.

    Donc, si j'ai bien compris le addslashes, c'est pour protéger les caractères (comme les ') en vue d'être enregistré dans une base de données.
    En fait c'est "en vue d'être inséré dans une requete" pour les problemes d'injection SQL et même tout simplement pour la bonne prise en compte des chaines avec des guillemets lorsqu'on construit une requete en concatenant les elements.

    Les informations dans la base de donnée n'ont, en elle même pas besoin d'être echappées.
    D'ailleurs dans l'orientation actuelle est d'utiliser les requêtes préparées pour lequel on n'a plus besoin d'échapper les caractères.

    htmlentities, pour éviter de prendre en compte les balises HTML.
    Effectivement htmlentities empeche que du code html ou javascript soit affiché la ou il ne devrait pas.

    Par contre je ne comprends pas l'usage des utf8_decode et utf8_encode.
    http://fr.php.net/utf8_decode
    ca ne sert que ca si tu as besoin de passer des données encodées en ISO vers des données encodées en UTF8 et vice-verca.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre confirmé
    Inscrit en
    Février 2008
    Messages
    190
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 190
    Par défaut
    Merci pour ta réponse Sabotage.

    Pour en revenir au Javascript, je bloque ma page si il est désactivé.
    Donc, à priori il peut pas passer outre. Je précise que c'est pour un site Intranet d'entreprise et que de plus on est obliger de passer par Internet Explorer 6.0 (limitation de notre service info).

    Sinon, ok pour le utf8_encode et decode mais alors pourquoi, si je n'est pas ces deux lignes je me retrouves avec des caractères bizarres quand j'utilise des accents ? J'ai pas l'intérêt dans ce cas de figure de passer en ISO.

    Mon serveur est configuré en UTF, mon Charset aussi et l'encodage de mes pages également. As-tu une idée ?

  4. #4
    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
    Par défaut
    Pour en revenir au Javascript, je bloque ma page si il est désactivé.
    et si je desactive le javascript apres être arrivé sur ta page ?

    Pour l'encodage, tu dois avoir quelque chose, quelque part qui n'est pas si UTF8 que ca
    Que tu parles d'encodage des pages, tu parles bien de l'encodage des fichiers ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Membre confirmé
    Inscrit en
    Février 2008
    Messages
    190
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 190
    Par défaut
    Citation Envoyé par sabotage Voir le message
    et si je desactive le javascript apres être arrivé sur ta page ?

    Pour l'encodage, tu dois avoir quelque chose, quelque part qui n'est pas si UTF8 que ca
    Que tu parles d'encodage des pages, tu parles bien de l'encodage des fichiers ?
    Ah, je ne n'avais effectivement pas penser à cette solution pour Javascript. Donc je dois tout protéger... ok...

    Pour l'encodage des pages, je travaille avec Komodo. J'ai mes pages ouvertes dans des onglets, je fais bouton droit, properties and settings et là,à file Settings j'ai une ligne Encoding où je choisis UTF-8. Donc je dirais oui à ta question, après il y'a peut-être un autre endroit à changer mais je ne vois pas où.

  6. #6
    Invité
    Invité(e)
    Par défaut
    A voir (peut-etre) :
    http://securite.developpez.com/

  7. #7
    Membre confirmé
    Inscrit en
    Février 2008
    Messages
    190
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 190
    Par défaut
    Merci pour ta réponse, je vais regarder ça.

    Sinon, pour mon problème d'accents, voici ce que j'obtient à la place de mon caractère accentué : ç

    Pas cool... Est-ce que ca peut venir d'une config du serveur ?

  8. #8
    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
    Par défaut
    D'ou provient la donnée qui ne s'affiche pas correctement ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  9. #9
    Membre confirmé
    Inscrit en
    Février 2008
    Messages
    190
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 190
    Par défaut
    Citation Envoyé par sabotage Voir le message
    D'ou provient la donnée qui ne s'affiche pas correctement ?
    En fait, j'ai une première page avec des champs de texte, des cases à cocher, etc... Un formulaire classique en fait.

    En cliquant sur le bouton Envoyé, tu passe par une méthode POST qui affiche une page avec un récapitulatif de toutes les données que tu as rentrée.
    ATTENTION : je précise quand même que ce sont les accents rentrés par l'utilisateur et non pas des 'phrases types' qui sont dans mon script.

    Et c'est là que tous les accents sont transformé de cette manière. (Après tu as un bouton envoyé qui envoie la page HTML par eMail et donc tu as le même problème, normal).

    Donc mes 3 pages sont bien en UTF-8, mon Charset aussi (qui est dans une autre page puisque je passe par un include pour inséré les première balises commune en HTML).

    Est-ce que cela réponds à ta question ?

    Ps : d'ailleurs parfois il me rajoute des espaces dans mes phrases, y compris celles qui sont renvoyé par mes scripts... Ca aussi je comprends pas pourquoi... Surtout que c'est très aléatoires.

  10. #10
    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
    Par défaut
    Est-ce que tes include sont en utf8 ?
    Qu'indique ton navigateur comme encodage quand tu es sur la page ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  11. #11
    Membre confirmé
    Inscrit en
    Février 2008
    Messages
    190
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 190
    Par défaut
    Citation Envoyé par sabotage Voir le message
    Est-ce que tes include sont en utf8 ?
    Qu'indique ton navigateur comme encodage quand tu es sur la page ?
    Alors excuses moi mais peux-tu m'en dire plus ???
    si mes include sont en UTF-8 ? Je ne sais pas, j'ai ce code dans ma page :
    <meta http-equiv="Content-Type" content="text/html; charset="UTF-8" />
    <script type="text/javascript" src="../javascript/mootools.js"></script>
    <script type="text/javascript" src="../javascript/slimbox.js"></script>
    <script type="text/javascript" src="../javascript/calendarDateInput.js"></script>
    <script language="JavaScript" type="text/JavaScript" src="../javascript/general.js"></script>
    <script language="JavaScript" type="text/JavaScript" src="../javascript/odyssee.js"></script>
    <link rel="stylesheet" media="screen" type="text/css" title="Design" href="../css/index.css" />
    Et dans ma page PHP, voici ce que j'écris dans le HEAD :
    <?php include '../include/header_spt.php'; ?>
    Et où dois-je regarder sur mon navigateur pour voir cette info ?

    Merci.

    Pas d'idées ?

    En fait, pour essayer d'être plus clair, si je fais affiché par un écho ou une balise HTML du texte accentué, ca fonctionne.
    Par contre si j'affiche du texte accentué écris par l'utilisateur, ca ne fonctionne plus et j'ai ce genre d'affichage.

    EDIT : J'ai mis é dans les champs Nom, Prénom et Description.
    Comme résultat sur la 2° page j'ai :
    Nom : Ã?
    Prénom : Ã?
    Description : é

    3 entrées identiques, 2 résultats différents, je comprends de moins en moins.

  12. #12
    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
    Par défaut
    Tu peux faire ce test tout simple ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset="UTF-8" />
    </head>
    <body>
    <?php if (isset($_POST['test'])) { echo $_POST['test']; } ?>
    <form action="" method="post">
    <input type="text" name="test" />
    <input type="submit" />
    </form>
    </body>
    </html>
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  13. #13
    Membre confirmé
    Inscrit en
    Février 2008
    Messages
    190
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 190
    Par défaut
    Citation Envoyé par sabotage Voir le message
    Tu peux faire ce test tout simple ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset="UTF-8" />
    </head>
    <body>
    <?php if (isset($_POST['test'])) { echo $_POST['test']; } ?>
    <form action="" method="post">
    <input type="text" name="test" />
    <input type="submit" />
    </form>
    </body>
    </html>
    Eh bien... Ca fonctionne...

  14. #14
    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
    Par défaut
    Tu n'as plus qu'a trouver ce qui est different entre ton code et ce code.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  15. #15
    Membre confirmé
    Inscrit en
    Février 2008
    Messages
    190
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 190
    Par défaut
    Citation Envoyé par sabotage Voir le message
    Tu n'as plus qu'a trouver ce qui est different entre ton code et ce code.
    C'est bien ça le problème...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset="UTF-8" />
    </head>
    <body>
    <?php if (isset($_POST['test'])) { echo $_POST['test']; } ?>
    <form action="" method="post">
    <input type="text" name="test" />
    <input type="submit" />
    </form>
    </body>
    </html>
    Ma balise META est identique, sauf que je passe par un include...
    Elle est donc dans un autre fichier avec d'autres balises, cf. plus haut.

    Je viens quand même de faire l'essai et de la mettre sur chaque page, idem.

    Ensuite, pour le reste c'est pas identique mais je procède de la même façon.
    J'ai rajouter mes appels Javascript, ce genre de truc mais je vois rien de différent.

    Serait-il possible de t'envoyer mes pages de code ?

    Merci en tout cas pour tes réponses...

    EDIT : Je passe par un bouton type 'button' et pas 'submit', mais après dans mon Javascript j'ai une ligne de code :
    document.getElementById("odyssee").submit();
    Mais je ne vois pas ce qui pourrait mettre la ... dans mon code Javascript...
    Rien ne fais référence à un quelconque Charset...

  16. #16
    Membre expérimenté

    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    191
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 191
    Par défaut
    juste comme ca une erreur sur cette ligne, une " en trop apres charset=.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

  17. #17
    Membre confirmé
    Inscrit en
    Février 2008
    Messages
    190
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 190
    Par défaut
    Citation Envoyé par Helfima Voir le message
    juste comme ca une erreur sur cette ligne, une " en trop apres charset=.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    Euh... hum... Bon, effectivement mais je fais des copier / coller de puis le début et j'avais donc ma ligne depuis un moment.

    En tout cas, je viens de copier/coller ta ligne et j'ai revérifier derrière (vu que la dernière fois je n'avais pas fais attention à cette différence).

    J'ai mis à jours via FTP les pages, j'ai fermé toutes mes fenêtres Internet Explorer, j'ai attendu un peu j'ai même ré-essayé mais TOUJOURS le même problème... Alors avant que j'aille me taper la tête contre un mur et m'explose le crâne à grand coups, est-ce qu'il y'a un 'délai' de mise à jour possible ?

    Merci encore pour ta réponse.

  18. #18
    Membre expérimenté

    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    191
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 191
    Par défaut
    regarde le code html retourné car en UTF-8 tous les caractère avec accent ne s'affiche pas il faut les remplacer par le code html équivalent.

    si on part de ton formulaire, tu as un ou plusieurs champs que tu remplis
    quand tu submit le formulaire quoi que tu as écrit dans tes champs tu dois retrouver ton text en intégrale, insert un affichage des $_POST au debut du script.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <?php
    print_r('<pre>'.$_POST.'</pre>');
    ?>
    regarde la source de la page html générée

    à la limite donne nous la source html générée

  19. #19
    Membre confirmé
    Inscrit en
    Février 2008
    Messages
    190
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 190
    Par défaut
    Citation Envoyé par Helfima Voir le message
    regarde le code html retourné car en UTF-8 tous les caractère avec accent ne s'affiche pas il faut les remplacer par le code html équivalent.

    si on part de ton formulaire, tu as un ou plusieurs champs que tu remplis
    quand tu submit le formulaire quoi que tu as écrit dans tes champs tu dois retrouver ton text en intégrale, insert un affichage des $_POST au debut du script.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <?php
    print_r('<pre>'.$_POST.'</pre>');
    ?>
    regarde la source de la page html générée

    à la limite donne nous la source html générée
    J'ai écris :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <?php
    print_r('<pre>'.$_SESSION.'</pre>');
    ?>
    J'ai pas précisé mais je passe par des SESSION et non des POST.
    Mais je ne pense pas que le problème vienne de là.
    Par contre j'ai écris 'Array'...

    Tu veux le code de la page qui génère, c'est bien ça ? Je la met ici direct ?

  20. #20
    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
    Par défaut
    Serait-il possible de t'envoyer mes pages de code ?
    tu peux les mettre les fichiers dans une archive ici sur le forum.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. sécuriser un formulaire par une équation
    Par aboura86 dans le forum Langage
    Réponses: 8
    Dernier message: 03/07/2008, 19h03
  2. Sécuriser mon formulaire
    Par isa150183 dans le forum Langage
    Réponses: 3
    Dernier message: 07/10/2007, 19h34
  3. Sécuriser un formulaire
    Par Z3c33 dans le forum Sécurité
    Réponses: 3
    Dernier message: 25/05/2007, 15h52
  4. Sécuriser un formulaire
    Par jerem78 dans le forum Sécurité
    Réponses: 2
    Dernier message: 07/06/2006, 18h02

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