Avec le développement continu de la technologie Internet, de plus en plus de sites Web et d'applications utilisent PHP comme langage de développement, et l'un des problèmes courants concerne l'exécution d'instructions SQL. Lors de l'exécution d'instructions SQL, des situations anormales peuvent provoquer une série de problèmes, tels qu'une fuite d'informations utilisateur, une détérioration de la stabilité du système, etc. Par conséquent, cet article expliquera comment empêcher les exceptions lors de l'exécution d'instructions SQL dans le développement du langage PHP.
1. Utiliser des objets PDO
PDO (PHP Data Objects) est une couche d'abstraction en PHP pour accéder aux bases de données. L'accès à plusieurs bases de données peut être obtenu via des objets PDO, évitant ainsi la duplication de code et offrant un moyen plus simple et plus sûr d'exécuter des instructions SQL. Par rapport aux instructions SQL natives, l'API de PDO est plus robuste car elle filtre automatiquement certaines instructions SQL dangereuses susceptibles de contenir du code nuisible, comme les attaques par injection SQL.
Par exemple, via l'exécution d'une instruction SQL native PDO :
try { $dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass); $sth = $dbh->prepare('SELECT * FROM table WHERE id = ?'); $sth->execute(array($id)); $result = $sth->fetchAll(); } catch (PDOException $e) { echo "Error!: " . $e->getMessage() . "<br/>"; die(); }
On peut voir que l'objet PDO utilise la méthode préparer pour prétraiter l'instruction SQL et la méthode d'exécution pour exécuter l'instruction SQL. De cette manière, les attaques par injection SQL peuvent être évitées dans une large mesure.
2. Empêcher les attaques par injection SQL
Les attaques par injection SQL font référence à des attaquants qui insèrent des valeurs de champ malveillantes dans des instructions SQL pour contourner la vérification ou effectuer des opérations malveillantes. Par exemple, le code suivant :
$id = $_GET['id']; $sql = "SELECT * FROM table WHERE id = " . $id; $result = $conn->query($sql);
Si l'attaquant attribue la valeur id à 1 ; DROP TABLE table -- , cela provoquera une opération malveillante de suppression de la table entière. Pour prévenir les attaques par injection SQL, les mesures suivantes peuvent être prises :
Les données saisies par l'utilisateur doivent être vérifiées de manière sécurisée, comme via des expressions régulières Les données d'entrée sont vérifiées à l'aide d'expressions ou de filtrage de données.
Utilisez des paramètres liés pour traiter les entrées de l'utilisateur, afin que les paramètres d'entrée puissent être échappés. Ensuite, associez-les avec des instructions SQL pour éviter les attaques par injection.
Par exemple :
$id = $_GET['id']; $stmt = $conn->prepare("SELECT * FROM table WHERE id=?"); $stmt->bindValue(1, $id); $stmt->execute(); $result = $stmt->fetch();
Dans cet exemple, nous pouvons voir que bindValue est utilisé pour lier les paramètres Lors de l'exécution de l'instruction SQL filtrée, seul l'objet $stmt doit être. Remplacez simplement les valeurs des paramètres.
Utilisez des filtres pour vous assurer que les données transmises par l'utilisateur ne contiennent que des caractères valides. Par exemple, utilisez le filtre via la fonction filter_var en PHP :
$id = $_GET['id']; $id = filter_var($id, FILTER_SANITIZE_NUMBER_INT); $sql = "SELECT * FROM table WHERE id = " . $id; $result = $conn->query($sql);
3. Évitez les fuites d'informations sensibles
Pendant le processus de requête SQL, dans certains cas, vous devrez interroger certaines informations sensibles, telles que le mot de passe, etc. Étant donné que le jeu de résultats SQL doit être renvoyé à l'appelant, des informations sensibles peuvent être divulguées.
Afin d'éviter la fuite d'informations sensibles, vous pouvez utiliser les méthodes suivantes :
Pour résumer, en utilisant des objets PDO, en empêchant les attaques par injection SQL et en évitant les fuites d'informations sensibles, les exceptions lors de l'exécution des instructions SQL peuvent être efficacement évitées dans le développement du langage PHP. Dans le même temps, il convient de noter que différentes applications doivent choisir des méthodes de mise en œuvre appropriées en fonction de circonstances spécifiques.
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!