fonction sécurité insertion BDD

alinalpes
Invité n'ayant pas de compte PHPfrance

10 sept. 2011, 16:12

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

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

10 sept. 2011, 18:11

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

@+
Il en faut peu pour être heureux ......

Avatar du membre
Mammouth du PHP | 1564 Messages

23 juin 2012, 21:32

C'est bien mais peut mieux faire.

pour la verif de chiffre je fait comme ceci:

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

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

23 juin 2012, 21:42

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:

@+
Il en faut peu pour être heureux ......

Avatar du membre
Mammouth du PHP | 1564 Messages

23 juin 2012, 23:50

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

ViPHP
xTG
ViPHP | 7331 Messages

24 juin 2012, 00:03

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...

Avatar du membre
Mammouth du PHP | 1564 Messages

24 juin 2012, 01:26

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.