Page 1 sur 1

Limiter la taille d'un champ

Posté : 19 janv. 2013, 17:51
par sam01
Comment faîtes-vous en générale pour éviter à un internaute malveillant d'insérer une très grand quantité de données dans un champs texte ou autres ?

Est-ce que vous testez systématiquement la longueur des champs ? C'est une question un peu générale afin de savoir quelles sont vos méthodes et vos différentes solutions ?

merci d'avance pour vos réponses.

Re: Limiter la taille d'un champ

Posté : 19 janv. 2013, 19:25
par gdc
Dans ton form

ajoute maxlenght="la valeur max que tu veux"
exemple:

Username: <input type="text" name="usrname" maxlength="10"><br>

Re: Limiter la taille d'un champ

Posté : 19 janv. 2013, 19:45
par dix2
quoique tu fasses, il faut faire une vérification côté serveur

Re: Limiter la taille d'un champ

Posté : 19 janv. 2013, 22:12
par sam01
il faut systématiquement vérifier la longueur de chaque champ ?
Le formulaire devient lourd à gérer alors ?

Re: Limiter la taille d'un champ

Posté : 19 janv. 2013, 23:10
par Fre3z69
Salutation

Tu n'écris le code qu'une fois, et de plus on ne néglige pas le traitement, et la sécurité

On a tous des scripts qui peuvent demander 2 à + de traitements par champs, selon ce que tu veux ^^.

Tu vérifie d'abord que le champ n'est pas vide, ensuite tu compte le nombre de caractères et tu vérifie que ça ne les dépasse pas, ensuite tu sécurise ou encode (pour les MDP) la valeur de ton champ, et dés fois tu vérifie que la valeur d'un champs est similaire à un autre.

Vive le codage ^^, mais au moins après chaque vérifications, tu t'assure que tu obtient au final ce que tu souhaite ;-)

Exemple:
			if (empty($email))
			{
				$i++;
				$email_erreur = "<li>Vous devez remplir le champ E-Mail</li>";
			}
			if(!$mail_free) //  requête ajax derrière ceci
			{
				$i++;
				$email_erreur1 = "<li>Votre adresse email est déjà utilis&eacute;e par un membre.</li>";
			}
			//On vérifie le format
			if (!empty($email) && (!preg_match("#^[a-zA-Z0-9._-]+@[a-zA-Z0-9._-]{2,}\.[a-z]{2,4}$#", $email)))
			{
				$i++;
				$email_erreur2 = "<li>L'adresse E-Mail n'a pas un format valide: type => [email protected]</li>";
			}
			if (empty($confirmemail) || $email != $confirmemail)
			{
				$i++;
				$email_erreur3 = "<li>l'email et la confirmation diffèrent ou la confirmation est vide.</li>";
			}
En espérant que ça peux t'aider

Cordialement

Re: Limiter la taille d'un champ

Posté : 19 janv. 2013, 23:26
par sam01
Bonsoir Fre3z69 et merci pour ton code.

mais je rends compte qu'à aucun moment tu ne teste la taille du champs...

Donc si tu ne le testes pas, c'est que ce n'est pas primordiale...

Re: Limiter la taille d'un champ

Posté : 19 janv. 2013, 23:31
par Fre3z69
Pour l'email non (j'avais donner ceici en exemple pour te montrer qu'on peu avoir plusieurs traitements pour un même champs) mais regarde pour un mot de passe par exemple:
			if (!empty($password) && (!preg_match("/^(?=.*[a-z]{1,})(?=.*[A-Z]{1,})(?=.*[0-9]{1,})[a-zA-Z0-9]+$/",$password)))
			{
				$i++;
				$mdp_erreur1 = "<li>Le mot de passe doit contenir des lettres en majuscules et en minuscules et des nombres.</li>";
			}
			if (strlen($password) < 6 || strlen($password) > 20)
			{
				$i++;
				$mdp_erreur2 = "<li>Le mot de passe doit être compris entre 6 et 20 caractères</li>";
			}
			if (!empty($confirm) && !empty($confirm) && $password != $confirm)
			{
				$i++;
				$mdp_erreur3 = "<li>Le mot de passe et votre confirmation diff&egrave;rent, ou sont vides.</li>";
			}
On vérifie bien la longueur du MDP, dans ce cas c'est utile, après ça dépend de ce que tu veux obtenir et ce que tu pense utile de limiter ou pas.
Perso, je limite le Login, le MDP, et dans les autres formulaire les titres.

En espérant que tu comprenne mieux

Cordialement

Re: Limiter la taille d'un champ

Posté : 20 janv. 2013, 12:09
par two3d
Salut,

je fait comme ceci personnellement:
<?php
if(isset($_POST['envoyer'])) { // c'est le nom "name" du bouton input type="submit" (peut être appelé autrement)
	if(empty($_POST['champ1'])) { // la vérification "empty" permet à la fois de savoir si ce champs est posté et de savoir si elle n'est pas vide
		echo "le champ1 est vide";
	} else {
		// on peut ensuite vrifier la longeur du champ champ1 avec la fonction strlen()
		if(strlen($_POST['champ1']) > ton chiffre maximum OR strlen($_POST['champ1']) < ton chiffre minimum) { // la vérification "empty" permet à la fois de savoir si ce champs est posté et de savoir si elle n'est pas vide
			echo "le champ1 compte trop ou pas assez de caractère"; // je fait perso cette vérif deux fois afin d'indiquer le visiteur exactement (d'abord le strlen < ensuite le strlen >), tu peut même indiquer au visiteur combien de caractère il à en trop, etc.... question d'estéticité et de compréhension...
		} else {
			// tous les champs sont correctement rempli: tu peut valider ta requête:
			// si tu veu être sûr de ne pas avoir de d'apostrophe (qui pourrai créer des pb une fois insérés dans ta BDD), tu peut utiliser la fonction htmlentities avec le flag ENT_QUOTES qui les convertira
			// ensuite, j'utilise également beaucoup de preg_match pour vérifier le contenu d'un champ
		}
	}
}

Re: Limiter la taille d'un champ

Posté : 20 janv. 2013, 14:37
par sam01
OK. Merci pour vos réponses.

Je voulais savoir si la taille des champs était systématiquement contrôlée car il y a quelques temps de cela, un site de vente de fleurs très connu à été piraté avec une méthode très simple. Une personne mal intentionné à fait un copié coller d'un champs text de plusieurs méga octet, l'as insérer dans le champs d'un formulaire et à validé le formulaire.

Cela à eu pour effet de rendre tous les achats de fleur gratuits :wink:

Si le webmaster avait pris la précaution de tester la longueur des champs, un tel bug ne serait jamais arrivé...

Re: Limiter la taille d'un champ

Posté : 20 janv. 2013, 14:48
par two3d
il faut toujours tester le contenu de ce qu'entre quiconque personne, parce qu'il y a une chose à savoir c'est que je peut par exemple créer un formulaire en local (sous wampserver par exemple) et envoyer mon formulaire, cette action consistera à contourner le maxlength="XX" d'un input :wink:

Une solution consiste à utiliser une clé unique à chaque fois que le formulaire est posté pour éviter cela

Re: Limiter la taille d'un champ

Posté : 20 janv. 2013, 14:51
par Fre3z69
A mon avis le cas c'est pas du texte pur qu'il à insérer, mais plutôt un genre de requête sql modifiant les prix, mais là, dans ce cas ça voudrais dire que le webmaster (celui qui à conçu le site) est un débutant de première ordre, et qu'il doit changer de métier.

Je critique pas le gars, mais c'est le genre d’erreur qui peux couter cher au client, et puis de toute manière, pas tout le monde est fait pour coder ;-)

Re: Limiter la taille d'un champ

Posté : 20 janv. 2013, 21:04
par two3d
très bonne idée le coup du preg_match pour un mot de passe minimum compliqué, j'avais pas vue :wink: