PhP restriction des caracteres d'un champ

Résolu/Fermé
ced3E Messages postés 101 Date d'inscription mardi 28 décembre 2010 Statut Membre Dernière intervention 9 janvier 2013 - 31 déc. 2010 à 01:11
ced3E Messages postés 101 Date d'inscription mardi 28 décembre 2010 Statut Membre Dernière intervention 9 janvier 2013 - 1 janv. 2011 à 21:55
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 :)
A voir également:

9 réponses

avion-f16 Messages postés 19250 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 22 décembre 2024 4 505
31 déc. 2010 à 14:19
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
ced3E Messages postés 101 Date d'inscription mardi 28 décembre 2010 Statut Membre Dernière intervention 9 janvier 2013 2
31 déc. 2010 à 19:11
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
moi je serais tenté de remplacer le preg_match de ced3E par celui la :
!preg_match('#[a-z|0-9|ÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËèéêëÇçÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ-]+#i', $nomdefamille)
0
Utilisateur anonyme
31 déc. 2010 à 19:27
n'oublie pas le point d'exclamation au debut ^^
0
ced3E Messages postés 101 Date d'inscription mardi 28 décembre 2010 Statut Membre Dernière intervention 9 janvier 2013 2
31 déc. 2010 à 20:11
hummm tu autorise les chiffres ammmmmine et tu n autorise pas les majuscules ? ^^
0
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
ced3E Messages postés 101 Date d'inscription mardi 28 décembre 2010 Statut Membre Dernière intervention 9 janvier 2013 2
Modifié par ced3E le 1/01/2011 à 08:45
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
Utilisateur anonyme
1 janv. 2011 à 09:22
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
ced3E Messages postés 101 Date d'inscription mardi 28 décembre 2010 Statut Membre Dernière intervention 9 janvier 2013 2
Modifié par ced3E le 1/01/2011 à 10:31
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
Utilisateur anonyme
1 janv. 2011 à 11:20
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
avion-f16 Messages postés 19250 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 22 décembre 2024 4 505
1 janv. 2011 à 13:23
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
ced3E Messages postés 101 Date d'inscription mardi 28 décembre 2010 Statut Membre Dernière intervention 9 janvier 2013 2
1 janv. 2011 à 20:53
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
ced3E Messages postés 101 Date d'inscription mardi 28 décembre 2010 Statut Membre Dernière intervention 9 janvier 2013 2
1 janv. 2011 à 21:55
Non ca ne marche pas pour quoi ?
0