PhP restriction des caracteres d'un champ
Résolu
ced3E
Messages postés
107
Statut
Membre
-
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 :)
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
-
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) -
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 -
moi je serais tenté de remplacer le preg_match de ced3E par celui la :
!preg_match('#[a-z|0-9|ÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËèéêëÇçÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ-]+#i', $nomdefamille) -
hummm tu autorise les chiffres ammmmmine et tu n autorise pas les majuscules ? ^^
-
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question -
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 :) -
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() -
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 :( -
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. -
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.