Position actuelle: Accueil> Derniers articles> Comment prévenir efficacement les attaques d'injection SQL en PHP? Compétences pratiques en programmation

Comment prévenir efficacement les attaques d'injection SQL en PHP? Compétences pratiques en programmation

M66 2025-06-16

Conseils de programmation PHP: comment prévenir les attaques d'injection SQL

La sécurité est cruciale lors de l'exécution des opérations de base de données. Les attaques d'injection SQL sont un moyen courant de cyberattaque, ce qui conduit à des opérations d'erreur de base de données et même à une fuite de données en insérant un code SQL malveillant. Par conséquent, afin d'empêcher les attaques d'injection SQL, nous devons prendre une variété de précautions pour assurer la sécurité de nos applications.

1. Utilisez une requête paramétrée

Les requêtes paramétrées sont l'un des moyens les plus efficaces de prévenir les attaques d'injection SQL. Il évite l'exécution du code SQL malveillant en séparant les valeurs entrées par l'utilisateur de l'instruction SQL Requête. Dans PHP, vous pouvez utiliser l'extension PDO (PHP Data Object) pour implémenter des requêtes paramétrées.

Voici un exemple d'utilisation de l'APD pour implémenter les requêtes paramétrées:

      $ servername = "localhost";
      $ username = "your_username";
      $ password = "your_password";
      $ dbname = "your_database";

      essayer {
        $ conn = new PDO ("mysql: host = $ servername; dbname = $ dbname", $ username, $ mot de passe);
        $ Conn-> setAttribute (PDO :: att_errMode, PDO :: errMode_Exception);

        $ username = $ _post ['username'];
        $ mot de passe = $ _post ['mot de passe'];

        $ stmt = $ con-> prépare ("SELECT * dans les utilisateurs où nom d'utilisateur =: nom d'utilisateur et mot de passe =: mot de passe");
        $ stmt-> bindParam (': nom d'utilisateur', $ nom d'utilisateur);
        $ stmt-> bindParam (': mot de passe', $ mot de passe);

        $ stmt-> execute ();
        $ result = $ stmt-> fetchall (PDO :: fetch_assoc);
      } catch (pDoException $ e) {
        // gérer les exceptions ...
      }
    

Grâce à une requête paramétrée, nous traitons les valeurs d'entrée utilisateur séparément des instructions SQL et lions les valeurs d'entrée à l'espace réservé de la requête via la méthode BindParam, empêchant ainsi l'injection SQL.

2. Filtrez et vérifiez l'entrée utilisateur

En plus d'utiliser des requêtes paramétrées, une autre façon d'éviter l'injection de SQL consiste à filtrer et valider strictement l'entrée utilisateur. Les fonctions de filtre de PHP, telles que filter_var () et filter_input (), peuvent être utilisées pour vérifier et nettoyer les données d'entrée.

Voici un exemple de filtrage et de validation de l'entrée utilisateur:

      $ username = $ _post ['username'];
      $ mot de passe = $ _post ['mot de passe'];

      if (! vide ($ username) &&! vide ($ mot de passe)) {
        // filtre et vérifiez le nom d'utilisateur et le mot de passe $ filtereserName = filter_var ($ username, filter_sanitize_string);
        $ filteredPassword = filter_var ($ mot de passe, filter_sanitize_string);
        
        // Effectuer une opération de requête ...
      } autre {
        // Le nom d'utilisateur et le mot de passe ne peuvent pas être vides Echo "Le nom d'utilisateur et le mot de passe ne peuvent pas être vides.";
      }
    

Dans cet exemple, nous avons utilisé le filtre filter_sanitize_string pour effacer les caractères dangereux de l'entrée de l'utilisateur, de sorte que même si l'utilisateur entre dans le code SQL malveillant, il sera automatiquement supprimé ou échappé.

3. Minimiser les autorisations de base de données

Pour améliorer la sécurité du système, il est préférable de limiter le minimum les autorisations de l'utilisateur de la base de données et de leur donner uniquement les autorisations nécessaires pour effectuer les opérations nécessaires. Évitez de donner aux utilisateurs de la base de données des autorisations excessives, en particulier les autorisations opérationnelles pour les données sensibles.

4. Mettez régulièrement à jour et à maintenir les applications et les bases de données

Pour garantir la sécurité des applications et des bases de données, les mises à jour régulières et la maintenance sont très importantes. Corrigez les vulnérabilités de sécurité connues en temps opportun et assurez-vous que la base de données est sauvegardée régulièrement pour éviter la perte de données ou la falsification malveillante.

Résumer

La prévention des attaques d'injection SQL est l'une des étapes importantes pour assurer la sécurité des applications. En utilisant des requêtes paramétrées, en filtrant et en validant les entrées, en restreignant les autorisations de base de données, et les mises à jour et la maintenance périodiques, nous pouvons effectivement empêcher les attaques d'injection SQL. De plus, nous devons prêter une attention régulière aux dernières menaces et vulnérabilités de sécurité et prendre des mesures préventives correspondantes.