Maison > base de données > tutoriel mysql > Comment les requêtes paramétrées avec des points d'interrogation empêchent-elles les attaques par injection SQL ?

Comment les requêtes paramétrées avec des points d'interrogation empêchent-elles les attaques par injection SQL ?

Susan Sarandon
Libérer: 2025-01-09 21:21:43
original
495 Les gens l'ont consulté

How Do Parameterized Queries with Question Marks Prevent SQL Injection Attacks?

Prévenir l'injection SQL avec des requêtes paramétrées : l'approche du point d'interrogation

Les requêtes paramétrées, indiquées par le point d'interrogation (?) en SQL, constituent une défense cruciale contre les vulnérabilités d'injection SQL. Ces requêtes sont essentielles lors de la construction et de l'exécution dynamique d'instructions SQL au sein d'un programme.

Le principal avantage des requêtes paramétrées par rapport aux requêtes construites manuellement réside dans une sécurité renforcée. La bibliothèque de base de données gère l'insertion de paramètres, appliquant automatiquement les mécanismes d'échappement nécessaires pour empêcher l'injection de code malveillant. Considérez cet exemple vulnérable :

<code class="language-sql">string s = getStudentName();
cmd.CommandText = "SELECT * FROM students WHERE (name = '" + s + "')";
cmd.Execute();</code>
Copier après la connexion

Si un utilisateur saisit : Robert'); DROP TABLE students; --

La requête résultante devient susceptible d'être attaquée.

La solution consiste à utiliser des requêtes paramétrées :

<code class="language-sql">s = getStudentName();
cmd.CommandText = "SELECT * FROM students WHERE name = ?";
cmd.Parameters.Add(s);
cmd.Execute();</code>
Copier après la connexion

La bibliothèque nettoie désormais l'entrée, rendant le code malveillant inoffensif : la requête devient effectivement "SELECT * FROM students WHERE name = 'Robert''); DROP TABLE students; --'" — le code injecté est traité comme du texte littéral.

Bien que le point d'interrogation soit un espace réservé largement utilisé, d'autres systèmes de bases de données, tels que MS SQL Server, utilisent des paramètres nommés (par exemple, @varname) pour une meilleure lisibilité :

<code class="language-sql">cmd.Text = "SELECT thingA FROM tableA WHERE thingB = @varname";
cmd.Parameters.AddWithValue("@varname", 7);
result = cmd.Execute();</code>
Copier après la connexion

Cette approche offre les mêmes avantages en matière de sécurité avec une identification plus claire des paramètres.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal