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
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
A voir également:
- PhP restriction des caracteres d'un champ
- Caractères ascii - Guide
- Restriction instagram - Guide
- Caractères spéciaux clavier azerty - Guide
- Caractères spéciaux - Guide
- Easy php - Télécharger - Divers Web & Internet
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
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)
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)
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
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
$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
Utilisateur anonyme
Modifié par ammmmmine le 31/12/2010 à 19:27
Modifié par ammmmmine le 31/12/2010 à 19:27
moi je serais tenté de remplacer le preg_match de ced3E par celui la :
!preg_match('#[a-z|0-9|ÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËèéêëÇçÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ-]+#i', $nomdefamille)
!preg_match('#[a-z|0-9|ÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËèéêëÇçÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ-]+#i', $nomdefamille)
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
31 déc. 2010 à 20:11
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
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
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 :)
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 :)
Utilisateur anonyme
1 janv. 2011 à 09:22
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()
EX:
$prenom = mysql_real_escape($_POST['prenom']),
pour les mots de passes tu les passes dans la fonction md5()
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
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 :(
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 :(
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
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.
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.
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
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.
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.
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
1 janv. 2011 à 21:55
Non ca ne marche pas pour quoi ?