Outils pour utilisateurs

Outils du site


bloc3:sqlinjection

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
bloc3:sqlinjection [2024/11/06 14:59] – [Mise en œuvre PHP] cossavella.kbloc3:sqlinjection [2025/04/30 13:58] (Version actuelle) – [Paramètres nommés] admin
Ligne 13: Ligne 13:
 ==== Généralités ==== ==== Généralités ====
  
-La plupart des SGBD modernes utilisent un mécanisme dit de **<color #ed1c24>requêtes paramétrées</color>** ou <color #ed1c24>**requête préparées**</color>.+La plupart des SGBD modernes utilisent un mécanisme dit de <color #00a2e8>requêtes paramétrées</color> ou <color #00a2e8>requête préparées</color>.
 Ce mécanisme a pour but d'améliorer la sécurité et l'efficacité des requêtes SQL.   Ce mécanisme a pour but d'améliorer la sécurité et l'efficacité des requêtes SQL.  
  
Ligne 25: Ligne 25:
  
 Les requêtes préparées offrent plusieurs avantages par rapport aux requêtes classiques.  Les requêtes préparées offrent plusieurs avantages par rapport aux requêtes classiques. 
-Elles permettent <color #ed1c24>**d'optimiser l'exécution de requêtes répétées**</color>, car la requête n'a besoin d'être analysée qu'une seule fois, même si elle est exécutée plusieurs fois avec des données différentes.  +Elles permettent <color #00a2e8>d'optimiser l'exécution de requêtes répétées</color>, car la requête n'a besoin d'être analysée qu'une seule fois, même si elle est exécutée plusieurs fois avec des données différentes.  
-<color #ed1c24>**Cela conduit à un gain de performance important pour des opérations répétitives**</color>. De plus, elles "figent" la structure de la requête, ne laissant aucune place à la modification malveillante de cette dernière, réduisant considérablement la surface d'attaque pour les injections SQL.+<color #00a2e8>Cela conduit à un gain de performance important pour des opérations répétitives</color>. De plus, elles "figent" la structure de la requête, ne laissant aucune place à la modification malveillante de cette dernière, réduisant considérablement la surface d'attaque pour les injections SQL.
 ==== Paramètres anonymes ==== ==== Paramètres anonymes ====
  
-**__Définition:__**: Ce sont des marqueurs utilisés dans les requêtes préparées pour <color #ed1c24>indiquer les emplacements des valeurs à injecter, sans leur donner de noms explicites.</color> Ils ont représentés par des points d'interrogation **(?)** dans la requête SQL. +**__Définition__** : Ce sont des marqueurs utilisés dans les requêtes préparées pour <color #00a2e8>indiquer les emplacements des valeurs à injecter, sans leur donner de noms explicites.</color> Ils ont représentés par des points d'interrogation **(?)** dans la requête SQL. 
  
 Lorsque la requête est exécutée, un tableau contenant les valeurs des paramètres est fourni, et ces valeurs sont liées aux marqueurs anonymes dans l'ordre de leur apparition dans la requête. Cela permet de sécuriser les requêtes sans risquer d'injecter du code malveillant dans la Base de Données. Lorsque la requête est exécutée, un tableau contenant les valeurs des paramètres est fourni, et ces valeurs sont liées aux marqueurs anonymes dans l'ordre de leur apparition dans la requête. Cela permet de sécuriser les requêtes sans risquer d'injecter du code malveillant dans la Base de Données.
Ligne 35: Ligne 35:
 ==== Paramètres nommés ==== ==== Paramètres nommés ====
  
-__**Définition**__: Une alternative aux paramètres anonymes dans les requêtes préparées. Au lieu d'utiliser des points d'interrogation pour marquer l'emplacement des valeurs, chaque paramètre est identifié par un nom précédé d'un deux points (:). Cela permet de spécifier les paramètres indépendamment de leur position dans la requête et d'améliorer la lisibilité, surtout pour les requêtes complexes. Un tableau associatif est ensuite utilisé pour lier chaque paramètre nommé à une valeur.+__**Définition**__: Une alternative aux paramètres anonymes dans les requêtes préparées. Au lieu d'utiliser des points d'interrogation pour marquer l'emplacement des valeurs, chaque paramètre est identifié par un nom précédé d'un deux points (**:**). Cela permet de spécifier les paramètres indépendamment de leur position dans la requête et d'améliorer la lisibilité, surtout pour les requêtes complexes. Un tableau associatif est ensuite utilisé pour lier chaque paramètre nommé à une valeur.
 ==== Mise en œuvre PHP ==== ==== Mise en œuvre PHP ====
  
 === Paramètres anonyme === === Paramètres anonyme ===
-<code php> $sql = "INSERT INTO uneTable (uneColonne, uneAutreColonne) +<code php>  
-VALUES (?,?)";</code>+$sql = "INSERT INTO uneTable (uneColonne, uneAutreColonne) 
 +        VALUES (?,?)"; 
 +</code>
  
 **Description**: Les valeurs des paramètres sont représentées par des points d'interrogation **//?//** dans la requête. **Description**: Les valeurs des paramètres sont représentées par des points d'interrogation **//?//** dans la requête.
Ligne 50: Ligne 52:
 === Paramètres Nommés === === Paramètres Nommés ===
  
-<code php> $sql = "INSERT INTO uneTable (uneColonne, uneAutreColonne) VALUES (:uneValeur, :uneAutreValeur)";</code>+<code php>  
 +$sql = "INSERT INTO uneTable (uneColonne, uneAutreColonne)  
 +        VALUES (:uneValeur, :uneAutreValeur)"; 
 +</code>
  
 **Description**: Les paramètres dans la requête sont identifiés par des noms spécifiques, précédés de deux-points **:** comme **:uneValeur** **Description**: Les paramètres dans la requête sont identifiés par des noms spécifiques, précédés de deux-points **:** comme **:uneValeur**
  
-<code php> $pdo_stmt->execute(array(':uneValeur' => 150, ':uneAutreValeur' => 'rouge'));</code>+<code php>  
 +$pdo_stmt->execute(array(':uneValeur' => 150, ':uneAutreValeur' => 'rouge')); 
 +</code>
  
 **Exécution**: Lors de l'exécution, vous passez un tableau associatif, où chaque clé est le nom du paramètre et chaque valeur est celle à utiliser. Nous n'avons pas besoin de suivre l'ordre des paramètres dans la requête. C'est plus lisible et flexible, surtout quand la requête est complexe. **Exécution**: Lors de l'exécution, vous passez un tableau associatif, où chaque clé est le nom du paramètre et chaque valeur est celle à utiliser. Nous n'avons pas besoin de suivre l'ordre des paramètres dans la requête. C'est plus lisible et flexible, surtout quand la requête est complexe.
Ligne 61: Ligne 68:
  
 ==== Mise en œuvre Java ==== ==== Mise en œuvre Java ====
 +=== Paramètres anonyme ===
 +=== Paramètres Nommés ===
 +=== Binding ===
 +
  
  
  
bloc3/sqlinjection.1730901542.txt.gz · Dernière modification : 2024/11/06 14:59 de cossavella.k