Page 1 sur 1

Sécurisé contre injection sql

Posté : 23 mars 2018, 20:07
par yoann38
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
}

Re: Sécurisé contre injection sql

Posté : 24 mars 2018, 15:03
par Spols
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

Re: Sécurisé contre injection sql

Posté : 26 mars 2018, 02:04
par @rthur
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