Page 1 sur 1

fonction sécurité insertion BDD

Posté : 10 sept. 2011, 16:12
par alinalpes
Bonjour,

je viens de finaliser 2 fonctions pour sécuriser mes insertions et retour de BDD, qu'en pensez vous ?
		// Insertion
	function bdd($string)
		{
			// On regarde si le type de string est un nombre entier (int) pour lui donner sa valeur numérique avec intval()
			if(ctype_digit($string))
			{
				$string = intval($string);
			}
			// Autres
			else
			{
				$string = mysql_real_escape_string($string);
				$string = htmlentities($string);
				
			}
				
			return $string;

		}
		// Retour des BDD
	 function html($string)
		{
			$string = htmlspecialchars($string);
			$string = stripslashes($string);
			return ($string);
		}
Merci

Re: fonction sécurité insertion BDD

Posté : 10 sept. 2011, 18:11
par moogli
Salut,

Regarde l'extension PDO ;)

Pour ce qui est de ton code tu considère qu'un nombre a virgule est une chaîne ?
Or en SQL un float, s'écrit comme un entier (donc sans les ' autour')

J'aurais plutôt utiliser is_numeric pour tester s'il s'agit d'une chaîne ou d'un chiffre
http://fr2.php.net/manual/fr/function.is-numeric.php

@+

Re: fonction sécurité insertion BDD

Posté : 23 juin 2012, 21:32
par two3d
C'est bien mais peut mieux faire.

pour la verif de chiffre je fait comme ceci:

preg_match("#^[0-9]+$#",$string)

Re: fonction sécurité insertion BDD

Posté : 23 juin 2012, 21:42
par moogli
1 an trop tard et use less des fonctions native existe (comme celle déjà indiquée ou avec filter_var) !

Sans oublier que ton expression régulière se limite aux entier positif (espace n+) et ne définit donc pas un nombre (espace réel) donc peu mieux faire :mrgreen:

@+

Re: fonction sécurité insertion BDD

Posté : 23 juin 2012, 23:50
par two3d
ouai c'est vrai, pour les virgule je fait: preg_match("#^[0-9]\.[0-9]$#",$string) je pense qu'on peut aussi demander si ya un . ou une ,

en fait je suis arrivé sur ce sujet en tapant sur notre ami gogole "comment sécurisé une chaine avant la mise en BDD"

ce qui résume en fait ma recherche à: comment fait on pour coder un guillemet " en une sorte #truc machin (genre: #5454)

sur ce, est il mieu de faire " plutot que #machin ? et comment coder le fameux guillemet simple ' ?

EDIT: j'ai trouver, c'est tout simple: http://php.net/manual/fr/function.htmlspecialchars.php Merci

Re: fonction sécurité insertion BDD

Posté : 24 juin 2012, 00:03
par xTG
C'est barbare ! O_o

Pour échapper un guillemet il y a des fonctions pour chaque driver de SGBD.
mysql => mysql_real_escape_string()
mysqli => mysqli_real_escape_string()
pgsql => pg_escape_string()
et ainsi de suite...

De plus il ne faut pas mélanger vérification de la données avec protection de la donnée.
On se doit de vérifier qu'on récupère un entier quand on souhaite un entier.
Mais cela n'a aucune relation avec l'échappement anti-injection des variables dans une requête.

Joli en tout cas le déterrage de topic pour tout ça...

Re: fonction sécurité insertion BDD

Posté : 24 juin 2012, 01:26
par two3d
Mais cela n'a aucune relation avec l'échappement anti-injection des variables dans une requête.
oui c'est vrai, dans tous les cas j'ai trouver la réponse à ma question.