PhP restriction des caracteres d'un champ

Résolu
ced3E Messages postés 107 Statut Membre -  
ced3E Messages postés 107 Statut Membre -
Bonjour,

Voila ca fais un petit moment que je cherche comment crée une restriction de mes champs prénom, nom.

j' aimerai autoriser seulement des lettres dans se style :

if ((strlen($Prenom) < 3) && (^[a-zA-Z-éèeç ext. . .])) {
$errors[] = 'Prénom non valide';
}

Le but est d' avoir toute les lettres possible qui constitue un prénom ou un nom.
Et avec cette vérification php ça permet de limité l' injection de code . . .

Comment sécurisé un champ Mot de passe sans limité les caractères ?

salutation ced :)

9 réponses

  1. avion-f16 Messages postés 19182 Date d'inscription   Statut Contributeur Dernière intervention   4 511
     
    Salut.

    Pour éviter les injections SQL, il suffit d'utiliser mysql_real_escape_string().
    Ou si tu utilises PDO : $objetPDO->quote($variable)

    Pour éviter les injections de codes (Javascript, CSS, HTML - la faille XSS) : il faut utiliser htmlspecialchars (je l'utilise à l'écriture, pas à l'enregistrement : ça n'a aucun effet dans la base de données)

    Pour limiter les caractères des prénoms, tu dois utiliser les expressions régulières (regular expression - regex)

    preg_match('#^[a-zA-Z0-9ÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËèéêëÇçÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ-]$#', $prenom)
    1
  2. ced3E Messages postés 107 Statut Membre 2
     
    Merci aprés documentation sur le sujet j' ai lu tout ça je vais voir pour le mettre en application. est il utile de le mettre sur chaque champ ? Car par exemple il sera dur d' injecté un code avec la condition d' avoir @ . comme " if(!filter_var($email1, FILTER_VALIDATE_EMAIL)) {
    $errors[] = 'L\'adresse email est non invalide';
    } "

    J' ai un petit problème pour couplé les conditions,

    if (preg_match('#^[a-zA-ZÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËèéêëÇçÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ-]$#', $Nomdefamille) && (strlen($Nomdefamille) < 3) && (strlen($Nomdefamille) >= 15) {
    $errors[] = 'Le Nom de famille non valide';
    }

    Ca marche pas
    0
  3. Utilisateur anonyme
     
    moi je serais tenté de remplacer le preg_match de ced3E par celui la :
    !preg_match('#[a-z|0-9|ÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËèéêëÇçÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ-]+#i', $nomdefamille)
    0
    1. Utilisateur anonyme
       
      n'oublie pas le point d'exclamation au debut ^^
      0
  4. ced3E Messages postés 107 Statut Membre 2
     
    hummm tu autorise les chiffres ammmmmine et tu n autorise pas les majuscules ? ^^
    0
    1. Utilisateur anonyme
       
      J'ai mis l'option "i"apres le # ( ca rendsle filtre insensible a la casse ) ^^

      Si t'es pas convaincu , tu peux toujours tester :)
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. ced3E Messages postés 107 Statut Membre 2
     
    Bon j ' ai testé ça ne marche pas un petit remix a ma sauce qui ne marche pas non plus je suis un peu perdu la ^^
    L 'objectif sécuriser le formulaire au maximum contre l' injection de code ou autre . . .

    Alors voila comment je comprend les chausses :

    -le champ mail est sécurisé par le fais qu on est obliger d' utiliser @ non ?

    -Les champ Prénom, nom par la restriction de 15 caractères et l' obligation d' utilisé des lettres ( c' est en cours . . . )

    -La vérification du mail par le champ mail
    mais sur le mot de passe je sèche un peu a par la restriction de 15 caractères que faire ? ^^ htmlspecialchars suffi ?

    Voila mon code php complet si vous avez des remarques a faire je débute :

    <?php
    $Prenom = isset($_POST['Prenom']) ? trim($_POST['Prenom']) : '';
    $Nomdefamille = isset($_POST['Nomdefamille']) ? trim($_POST['Nomdefamille']) : '';
    $Votremotdepasse = isset($_POST['Votremotdepasse']) ? trim($_POST['Votremotdepasse']) : '';
    $email1 = isset($_POST['email1']) ? $_POST['email1'] : '';
    $email2 = isset($_POST['email2']) ? $_POST['email2'] : '';

    $errors = array();

    if (isset($_POST["checkbox"]) == "" ) {
    $errors[] = 'La casse des Conditions d\'utilisation non cochée';
    }

    if (strlen($Prenom) < 3) {
    $errors[] = 'Le prénom doit contenir au moins 3 caractères';
    }

    if (strlen($Prenom) > 15) {
    $errors[] = 'Le prénom ne doit pas contenir plus de 15 caractères';
    }

    if (strlen($Nomdefamille) < 3) {
    $errors[] = 'Le nom de famille doit contenir au moins 3 caractères';
    }

    $lettre = "/[a-zA-ZÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËèéêëÇçÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ-]/";
    if (!preg_match($lettre, $Nomdefamille))
    {
    $errors[] = 'okkkkkkk';
    }

    if (strlen($Nomdefamille) > 15) {
    $errors[] = 'Le nom doit ne doit pas contenir plus de 15 caractères';
    }

    if (strlen($Votremotdepasse) < 3) {
    $errors[] = 'Votre mot de passe doit contenir au moins 3 caractères';
    }

    if (strlen($Votremotdepasse) > 15) {
    $errors[] = 'Votre mot de passe doit pas contenir plus de 15 caractères';
    }

    if(!filter_var($email1, FILTER_VALIDATE_EMAIL)) {
    $errors[] = 'L\'adresse email est non invalide';
    }

    if($email1 !== $email2) {
    $errors[] = 'Les adresses emails entrées ne correspondent pas';
    }

    if(count($errors) > 0) {
    echo '<div class="errors">';
    echo 'Il y a '.count($errors).' erreur(s) :<br/>';
    foreach($errors as $error) {
    echo '- '.$error.'<br/>';
    }
    echo '</div>';
    } else

    ?>

    Merci a vous et bonne année :)
    0
  7. Utilisateur anonyme
     
    pour securiser ton code : tu peux faire: mysql_real_escape_string()

    EX:

    $prenom = mysql_real_escape($_POST['prenom']),

    pour les mots de passes tu les passes dans la fonction md5()
    0
  8. ced3E Messages postés 107 Statut Membre 2
     
    hummm comment s applique la fonction md5 ?

    Pour se qui est des champ prénom nom pour quoi pas en plus de la restriction des caractères que je n arrive toujours pas a mettre en place :(
    0
    1. Utilisateur anonyme
       
      mon code il me parait correct pour le preg_match .
      concernant la fonction md5, ca te permet de cripter les mots de passes
      Ex:

      $mdp = md5($_POST['motdepasse']);
      0
  9. avion-f16 Messages postés 19182 Date d'inscription   Statut Contributeur Dernière intervention   4 511
     
    J'ai oublié le + après les crochets pour indiquer que le caractère doit y être une fois ou plus.
    Et dans les crochets, tu peux ajouter \s (avant le tiret) pour autoriser les espaces.

    Pour la fonction md5(), elle est à utiliser sur la variable avant l'insertion dans la base de données. Tu n'as pas besoin de sécuriser cette variable avec mysql_real_escape_string. Pour la connexion du membre, il faudra utiliser md5() sur la variable POST contenant le formulaire avant de faire la comparaison.
    0
  10. ced3E Messages postés 107 Statut Membre 2
     
    Sayer j' ai réussi a mettre ma restriction :
    if (!preg_match('#^[a-zA-ZÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËèéêëÇçÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ-]+$#', $Prenom)) {
    $errors[] = 'Le Prénom ne doit contenir que des caractères de type lettre';
    }

    Je sais pas si c' est trés propre mais ça marche.

    Merci de votre aide.
    0
    1. ced3E Messages postés 107 Statut Membre 2
       
      Non ca ne marche pas pour quoi ?
      0