[RESOLU] Sécurisé contre injection sql

Mammouth du PHP | 643 Messages

23 mars 2018, 20:07

Bonjour,
Voilà je cherche à sécurisé mes requetes car je pense avoir des problème d'injection sql.

Je vous montre une de mes requetes car elle sont toute basé sur le même shéma, que puis je faire de mieux coté sécurité svp.

Connection à la base via un include :
<?php
	mb_internal_encoding('UTF-8');
	// Configuration locale
	if(strstr($_SERVER['HTTP_HOST'], '127.0.0.1')) {

		// Connexion à la base
		try
		{
				$bdd = new PDO('mysql:host=127.0.0.1;dbname=mabase', 'root', '', array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8'));
				$bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING); 
				$bdd->exec('SET NAMES utf8');
		}
		 
		catch(PDOException $e)
		{
				exit($e->getMessage());
				die();
		}


	} else {
		
		// Connexion à la base
		try
		{
				$bdd = new PDO('mysql:host=*****;dbname=mabase', '****', 'mdp') or die(print_r($bdd->errorInfo()));
				$bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
				$bdd->exec('SET NAMES utf8'); 
		}
		 
		catch(PDOException $e)
		{
				exit($e->getMessage());
				die();
		}
	}
	

?>
Coté code une de mes requetes :
$sql = 'SELECT * FROM `loisirs`  JOIN regions ON regions.region_id = loisirs.id_region WHERE loisirs.date_fin_sortie > NOW() AND loisirs.valide = 1';
	 
	if (!empty($_GET['region'])) {
		$sql .= ' AND regions.url = \''.$_GET['region'].'\'';
	}
	if (!empty($_GET['departement'])) {
		$sql .= ' AND loisirs.id_departements = '.$_GET['departement'];
	}
	if (!empty($_GET['loisir']) ) {
		$sql .= ' AND loisirs.genre_loisir = \''.$_GET['loisir'].'\'';
	}
	if (!empty($_GET['ville'])) {
		$sql .= ' AND loisirs.city = \''. getRealValue($_GET['ville']). '\'';
	}

	$req = $bdd->query($sql);
	$nb = $req->rowCount();

      while($ligne = $req->fetch(PDO::FETCH_ASSOC)){  
  // J'affiché mes données
}

Mammouth du PHP | 1967 Messages

24 mars 2018, 15:03

Ce lien te sera très utile

https://openclassrooms.com/courses/evit ... ctions-sql

en gros un mysql_real_escape_string devant toutes tes variables _GET fera des miracles
Spols
pour les fan de rubik's cube ou pour les curieux ==> le portail francophone du rubik's cube

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

26 mars 2018, 02:04

Tu peux aussi utiliser les requêtes préparées pour injecter des variables dans tes requêtes c'est encore + propre :
https://openclassrooms.com/courses/pdo- ... frequentes
Quand tout le reste a échoué, lisez le mode d'emploi...