Sécuriser une fonction $_GET

Résolu/Fermé
Mitrails Messages postés 42 Date d'inscription samedi 7 mars 2015 Statut Membre Dernière intervention 8 avril 2015 - 3 avril 2015 à 15:39
Mitrails Messages postés 42 Date d'inscription samedi 7 mars 2015 Statut Membre Dernière intervention 8 avril 2015 - 3 avril 2015 à 17:35
Bonjour,
Voila j'aimerais juste savoir si ce que j'utilise avec la fonction GET était bien sécuriser contre les injections SQL, failles etc ..

if(isset($_GET['effacers']))
{
$id = mysqli_real_escape_string($connect, htmlentities(stripslashes(trim(intval($_GET['effacers'])))));


Voila merci d'avance pour vos réponse merci

1 réponse

ElementW Messages postés 4816 Date d'inscription dimanche 12 juin 2011 Statut Contributeur Dernière intervention 5 octobre 2021 1 225
Modifié par gravgun le 3/04/2015 à 16:01
'lut, non, car tu utilises la vieille manière de sécuriser ses entrées:
mysqli_real_escape_string
est laissée pour quasi-compatibilité avec la vieille extension MySQL, mais il ne faut pas s'en servir pour autant! Il faut se servir des requêtes préparées.
Surtout que là c'est pour une variable
$id
qui pourrait être utilisée autre part que dans ta base, or là c'est un string alors que c'est en réalité un entier.
De plus, tu voudras vérifier si l'ID est correct, c-à-d un entier correctement représenté:
if(isset($_GET['effacers']))
{
	if(is_int($_GET['effacers']))
	{
		$id = intval($_GET['effacers']);
		$stmt = mysqli_prepare($bdd, "DELETE FROM mabase WHERE id=?");
		mysqli_stmt_bind_param($stmt, 'i', $id); // 'i' représente le type du paramètre: entier
		if (mysqli_stmt_execute($stmt)) {
			// ligne supprimée
		} else {
			// erreur, ligne inexistante
		}
		mysqli_stmt_close($stmt);
	} else {
		// erreur, le paramètre n'est pas bon
	}
}

from human import idiocy
del idiocy
0
Mitrails Messages postés 42 Date d'inscription samedi 7 mars 2015 Statut Membre Dernière intervention 8 avril 2015
3 avril 2015 à 17:35
D'accord merci
0