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

PHP & Base de données Discussion :

Copier/coller de 200 caractères dans input text malgré maxlenght à 15


Sujet :

PHP & Base de données

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    1 221
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 221
    Points : 472
    Points
    472
    Par défaut Copier/coller de 200 caractères dans input text malgré maxlenght à 15
    Bonjour,

    Je viens de faire un truc bizarre et je voudrais comprendre, cela m'inquiète pour la sécurité.


    Les inputs text de mon formulaire d'inscription on un attribut maxlenght dont la valeur est 15. Impossible donc d'écrire plus de 15 caractères.



    Mais j'ai fais un copier d'une ligne de texte en chinois sur le site d'adsense et je l'ai collé dans un input de mon formulaire. Et là toute la ligne est passée ! Je me dis que ce peut être un problème pour la sécurité.

    J'ai essayé avec du texte bien de chez nous, et là le coller est tronqué à 15, c'est normal.



    Qu'en pensez-vous ? A quoi est-ce dû ?

  2. #2
    Membre actif
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    224
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 224
    Points : 201
    Points
    201
    Par défaut
    Bizzard.

    Sur mon site, j'ai "pensé" à quelque chose de ce genre alors, si tu peux vérifier ce input lors de l'envoie, fais un truc du genre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    if(!ereg('^[a-zA-Z]+$', $input))
     {
     echo 'Ca foire';
     }
    PS: t'as posté 2 fois ton topic

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    1 221
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 221
    Points : 472
    Points
    472
    Par défaut
    Ton idée est bonne, effectivement OVH m'avait indiqué de toujours forcer un masque pour les données des formulaires.

    A part ça, quelqu'un peut pirater une base en entrant des codes en chinois qui échaperaient aux fonctions de filtrage (htmlspecialchars, mysql_real_escape_string) ?


    Pendant que nous y sommes, aurais-tu sous le coude l'expression rationnelle qui permet dans ton exemple de n'autoriser que les lettres, éventuellement accentuées, et les chiffres ?

  4. #4
    Membre actif
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    224
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 224
    Points : 201
    Points
    201
    Par défaut
    Un peu parano sur les bords

    Pour le code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    $input = //valeur du champ
     
    if(!ereg('^[a-zA-Z0-9]+$', $input))
     echo 'Pas bon';
    Je crois que c'est ce que tu veux.

  5. #5
    Invité
    Invité(e)
    Par défaut
    Salut,

    Les valeurs MAXLENGHT (typiquement) des formulaires sont des valeurs purement indicatives, ça doit jamais être pris comme valeur de contrôle absolu.

    Il est simple de copier un formulaire, de le "forger", et d'envoyer les données en outrapassant les limites de caractères (entre autres) ou les valeurs attendues par le script PHP.

    Donc, il faut toujours controler les saisies coté serveur, par des expressions régulières ou des fonctions dédiées aux chaînes de caractère.

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    1 221
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 221
    Points : 472
    Points
    472
    Par défaut
    Merci pour le bout de code Tu es certains que les accents sont compris là dedans ?


    Un peu parano sur les bords
    Mieux vaut prévenir que guérir !

    (M'enfin c'est vrai que là je suis à deux doigts de pondre un forum avec des sessions cryptées...)


    J'avais lu que les pirates peuvent contourner les fonctions de filtrage en changeant l'encodage des caractères. Une histoire d'UTF-8 et d'ASCI si je me souviens bien.

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    1 221
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 221
    Points : 472
    Points
    472
    Par défaut
    Citation Envoyé par Guardian_7
    Salut,

    Les valeurs MAXLENGHT (typiquement) des formulaires sont des valeurs purement indicatives, ça doit jamais être pris comme valeur de contrôle absolu.

    Il est simple de copier un formulaire, de le "forger", et d'envoyer les données en outrapassant les limites de caractères (entre autres) ou les valeurs attendues par le script PHP.

    Donc, il faut toujours controler les saisies coté serveur, par des expressions régulières ou des fonctions dédiées aux chaînes de caractère.
    Intéressant commentaire que je vais prendre en compte au plus vite. Ceci étant quand tu parles de copier un formulaire, il s'agit tout de même de réussir à l'uploader sur le serveur ,non ?

  8. #8
    Membre actif
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    224
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 224
    Points : 201
    Points
    201
    Par défaut
    Il me semble que les accents sont gérés.

    Sûr à 99%

    Vaut mieux se méfier des pirates effectivement, mais parfois, en allant au plus simple, on est le plus sécurisé

  9. #9
    Membre éprouvé
    Inscrit en
    Juillet 2004
    Messages
    1 027
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 1 027
    Points : 1 164
    Points
    1 164
    Par défaut
    Intéressant commentaire que je vais prendre en compte au plus vite. Ceci étant quand tu parles de copier un formulaire, il s'agit tout de même de réussir à l'uploader sur le serveur ,non ?
    Non, il suffit de modifier l'attribut action du formulaire pour pointer sur le serveur.

    Tu peux aussi faire un appel via un socket, ce qui permet de modifier le header en plus.

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    1 221
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 221
    Points : 472
    Points
    472
    Par défaut
    Citation Envoyé par ePoX
    Non, il suffit de modifier l'attribut action du formulaire pour pointer sur le serveur.

    Tu peux aussi faire un appel via un socket, ce qui permet de modifier le header en plus.
    Tu veux dire qu'il suffit de reproduire un formulaire avec les mêmes noms de variable (et donc d'attribut name si ils correspondent), puis d'envoyer cela sur son hébergement perso. Ensuite en activant le formulaire depuis le site A d'un serveur X on peut agir sur le site B d'un serveur Y ?


    (Pour le socket je ne sais pas ce que c'est).

  11. #11
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par psychoBob
    Intéressant commentaire que je vais prendre en compte au plus vite. Ceci étant quand tu parles de copier un formulaire, il s'agit tout de même de réussir à l'uploader sur le serveur ,non ?
    Non, c'est bien plus simple que ça. Il suffit de copier le formulaire en question en local, le modifier, puis entrer l'adresse du script qui est sensé recevoir le formulaire dans <form action="">

    Exemple :

    Ton formulaire se nomme http://www.exemple.com/formulaire.html

    La page qui réceptionne les saisies du formulaire s'appelle http://www.exemple.com/control_formulaire.php

    Je télécharge le formulaire.html en local, je le modifie à ma guise, puis dans la balise form je mets :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <form action="http://www.exemple.com/control_formulaire.php">
    Il y'a également des outils malveillants qui peuvent faire ça.

    Je le mets sur un serveur quelquonc, et je l'envoie...

    Donc, toujours controler les saisies du coté serveur (Faut pas craindre d'être trop parano à ce niveau là !).

  12. #12
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    1 221
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 221
    Points : 472
    Points
    472
    Par défaut
    Abominable, je n'aurais pas cru que ce puisse être si simple. Vous avez un tuto sous la main qui détaille cela ?

  13. #13
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par psychoBob
    Abominable, je n'aurais pas cru que ce puisse être si simple. Vous avez un tuto sous la main qui détaille cela ?
    Pour les tutoriel je saurais pas trop ou t'éguiller, d'ailleurs y'a pas si longtemps j'avais projeté de rédiger un tutoriel concernant les formulaires (justement pour ces raisons) peut-être que je vais le finir...

    Parcontre il y'a un magazine français dénommé "Hackademy Magazine", il y'a un hors-série ce mois-ci qui décris précisément les 12 failles web les plus courament exploitées (php include, injections sql, xss etc), très bons articles.
    Dernière modification par Domi2 ; 29/08/2011 à 14h59.

  14. #14
    Membre éprouvé
    Inscrit en
    Juillet 2004
    Messages
    1 027
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 1 027
    Points : 1 164
    Points
    1 164
    Par défaut
    Le socket c'est lorsque tu créés un flux pour communiquer avec une machine distante.

    En faits c'est ce que font le serveur web et le navigateur à longueur de temps.

    L'interet ici peut être de passer des protections basé sur le referer par exemple.

    Pour ta question sur l'encodage je ne sais pas.

  15. #15
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par psychoBob

    A part ça, quelqu'un peut pirater une base en entrant des codes en chinois qui échaperaient aux fonctions de filtrage (htmlspecialchars, mysql_real_escape_string) ?
    Selon moi, non.

    Lorsque il y'a des caractères spéciaux qui sont entrés, htmlspecialchars effectue quand même une conversion (dans un encodage par défaut, ou alors dans l'encodage qui peut être définit en 3ème paramètre optionnel de la fonction

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     
    // Exemple
     
     $new = htmlspecialchars("<a href='test'>Test</a>", ENT_QUOTES, ENCODAGE);
    Donc au pire, ça affichera des caractères curieux à l'écran... sans intervenir au-delà.

    En ce qui concerne mysql_real_escape_string, cette fonction échape les caractères en fonction de l'encodage de la connexion MySQL. Donc pas de problème à premier vue.

    (Ce n'est pas le cas pour la fonction mysql_escape_string)

  16. #16
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    1 221
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 221
    Points : 472
    Points
    472
    Par défaut
    Ok

    Merci à vous tous pour vos réponses. Je n'ai pas d'autres question là, ça doit être l'heure...

    Demain je reprend mon formulaire d'inscription en le blindant à mort (c'est à dire avec des fagots de paille mais bon).


    Je ne marque pas résolu tout de suite, dès fois qu'une question me vienne en dormant.

    (Je vais me renseigner sur le magazine Hackademy Magazine : la meilleur défense, c'est l'attaque parait-il. Je vais m'auto pirater un de ces jours).

  17. #17
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    1 221
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 221
    Points : 472
    Points
    472
    Par défaut
    Citation Envoyé par kalash_jako
    Il me semble que les accents sont gérés.

    Sûr à 99%

    Vaut mieux se méfier des pirates effectivement, mais parfois, en allant au plus simple, on est le plus sécurisé
    Bah non ils sont pas gérés, je viens de vérifier, les accents sont bloqués avec l'expression :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    if(ereg('^[a-zA-Z0-9]+$', $utilisateur))
    Quelqu'un saurait-il faire accepter les accents à cette expression rationnelle, ainsi que le trait d'unition (-).

    Merci d'avance

  18. #18
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par psychoBob
    Bah non ils sont pas gérés, je viens de vérifier, les accents sont bloqués avec l'expression :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    if(ereg('^[a-zA-Z0-9]+$', $utilisateur))
    Quelqu'un saurait-il faire accepter les accents à cette expression rationnelle, ainsi que le trait d'unition (-).

    Merci d'avance
    Non les accents ne sont pas précisés dans cettre expression régulière. C'est normal...

    Essai plutôt ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    if (ereg('^[a-zA-Z0-9éàèüö-]+$', $utilisateur))
    Enfaite il faut que tu spécifies les lettres accentuées comme ci-dessus, ainsi que les autres caractères que tu veux autoriser (comme le trai d'union dans l'exemple). C'est à titre d'exemple, je n'ai pas spécifier tous les caractères accentués possibles...

    a-z et A-Z sont des classes de caractères, elles regroupes tous les caractères alphabétiques ASCII (donc pas les accents).

    Aussi PHP.net conseille d'utiliser plutôt preg_replace à la place de ereg, car plus rapide. (http://www.php.net/ereg), il en va de même pour toutes les autres fonctions preg.

Discussions similaires

  1. copier coller dans input text
    Par BRUNO71 dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 25/11/2011, 09h23
  2. [CSS][IE]image dans input text
    Par lejert dans le forum Mise en page CSS
    Réponses: 6
    Dernier message: 23/05/2009, 01h31
  3. Réponses: 3
    Dernier message: 26/05/2006, 19h49
  4. Réponses: 1
    Dernier message: 28/02/2006, 08h40
  5. [Word][ISO-...] Copier coller d'un word dans un textArea
    Par yolepro dans le forum Servlets/JSP
    Réponses: 1
    Dernier message: 14/11/2005, 17h34

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