Lorsque vous utilisez PHP pour le développement Web, le fonctionnement des bases de données est l'une des tâches les plus courantes du travail quotidien. Afin d'éviter les problèmes de sécurité tels que l'injection SQL, nous devons effectuer un traitement d'évasion approprié sur les données saisies par l'utilisateur. Lorsque vous utilisez des bases de données MySQL, l'extension MySQLI de PHP offre une fonction couramment utilisée et sécurisée: Real_escape_string , utilisée pour échapper aux chaînes, améliorant ainsi la sécurité des opérations de base de données.
L'extension MySQLI (MySQL améliorée) est un module d'extension en PHP pour interagir avec les bases de données MySQL. Par rapport aux premières extensions MySQL , MySQLI fournit des fonctions plus riches, telles que les instructions de prétraitement à l'appui, le contrôle des transactions et un mécanisme de gestion des erreurs plus complet.
Pour utiliser l'extension MySQLI , vous devez d'abord créer un objet de connexion de base de données comme suit:
<code> $ host = 'localhost'; $ user = 'db_user'; $ mot de passe = 'db_password'; $ database = 'test_db';$ Conn = new mysqli ($ host, $ utilisateur, $ mot de passe, $ database);
if ($ con-> connect_error) {
Die ('La connexion a échoué:'. $ con-> connect_error);
}
</code>
Ce code utilise le constructeur MySQLI pour établir une connexion au serveur MySQL et détermine si la connexion est réussie.
Real_escape_string est une méthode fournie par l'objet MySQLI pour échapper aux chaînes utilisées dans les instructions SQL. Cela peut empêcher les caractères spéciaux (tels que les citations, les barres réformées, etc.) de détruire la syntaxe SQL, empêchant ainsi efficacement les attaques d'injection SQL.
Son utilisation typique est la suivante:
<code> $ user_input = "O'Reilly"; $ Safe_Input = $ Conn-> real_escape_string ($ user_input); $ sql = "select * dans les utilisateurs où name = '$ Safe_Input'"; $ result = $ Conn-> Query ($ SQL); </code>Dans cet exemple, si l'O'Reilly entré par l'utilisateur n'est pas échappé, cela entraînera une erreur dans l'instruction SQL ou même causera des problèmes de sécurité. La méthode Real_escape_String échappe automatiquement à des devis uniques à O \ 'Reilly , construisant ainsi une instruction SQL légale et sûre.
Doit être utilisé après la connexion de la base de données
Real_escape_string dépend du jeu de caractères de la connexion actuelle, il doit donc être appelé après le succès de la connexion.
Pas égal à un remplacement pour les déclarations de prétraitement <br> Bien que Real_escape_string puisse assurer une certaine sécurité, il ne peut pas remplacer complètement les instructions de prétraitement. Les déclarations de prétraitement sont le moyen le plus sûr d'empêcher l'injection de SQL.
Les jeux de caractères doivent être cohérents <br> Assurez-vous que le jeu de caractères utilisé par PHP et la base de données est cohérent (comme UTF8MB4), sinon il peut conduire à échapper à l'échec ou aux caractères brouillés.
Voici un exemple d'utilisation d'un formulaire HTML pour recevoir l'entrée de l'utilisateur et le traiter via Real_escape_string :
<code> & lt; form méthode = "post" action = "https://gitbox.net/process.php" & gt; Nom d'utilisateur: & lt; input type = "text" name = "username" & gt; & lt; input type = "soumi" value = "soumi" & gt; & lt; / form & gt; </code>Process in Process.php :
<code> $ conn = new mysqli ('localhost', 'utilisateur', 'mot de passe', 'database'); if ($ con-> connect_error) {
Die ('La connexion a échoué:'. $ con-> connect_error);
}
$ username = $ _post ['username'];
$ Safe_Username = $ Conn-> Real_escape_string ($ username);
$ sql = "select * dans les utilisateurs où username = '$ Safe_Username'";
$ result = $ Conn-> Query ($ SQL);
if ($ result && $ result-> num_rows> 0) {
écho "l'utilisateur existe déjà";
} autre {
écho "l'utilisateur n'existe pas";
}
</code>
MySQLI :: Real_escape_string est l'un des outils importants de PHP pour empêcher l'injection SQL. Il protège la légitimité des instructions SQL en échappant aux caractères spéciaux dans l'entrée de l'utilisateur. Cependant, pour une plus grande sécurité, les développeurs devraient prioriser l'utilisation des déclarations de prétraitement. Après avoir compris l'utilisation de base de Real_escape_string , vous pouvez traiter la saisie de l'utilisateur plus en toute confiance et interagir en toute sécurité avec la base de données.
Étiquettes associées:
mysqli