Requêtes paramétrées pour des connexions PHP-MySQL sécurisées
L'injection SQL représente une menace de sécurité grave pour les applications Web. En manipulant les requêtes SQL, les attaquants peuvent obtenir un accès non autorisé à des données sensibles ou perturber les opérations de la base de données. Les requêtes paramétrées fournissent une contre-mesure efficace pour atténuer cette vulnérabilité.
Voici un extrait de code d'une page de connexion qui illustre comment préparer une requête paramétrée en PHP avec MySQL :
<code class="php">$dbc = @mysqli_connect($dbhost, $dbuser, $dbpass, $db); // MySQL connection $userName = $_POST["username"]; $userPass = $_POST["password"]; $stmt = mysqli_prepare($dbc, "SELECT * FROM users WHERE username = ? AND password = ?"); mysqli_stmt_bind_param($stmt, "s", $userName); mysqli_stmt_bind_param($stmt, "s", $userPass); mysqli_stmt_execute($stmt); $row = mysqli_stmt_fetch($stmt); if (!$row) { echo "No existing user or wrong password."; }</code>
Ce code établit une connexion à la base de données MySQL à l'aide de mysqli_connect et attribue l'identifiant de connexion à $dbc. Les variables $userName et $userPass reçoivent le nom d'utilisateur et le mot de passe saisis par l'utilisateur sur la page de connexion.
La fonction mysqli_prepare initialise une instruction préparée. La requête SQL qui sera exécutée est passée en premier argument. Dans ce cas, il récupère toutes les lignes de la table des utilisateurs où le nom d'utilisateur et le mot de passe correspondent aux paramètres d'entrée.
Ensuite, mysqli_stmt_bind_param est utilisé pour lier les paramètres d'entrée fournis par l'utilisateur, $userName et $userPass, à les espaces réservés (?) dans la déclaration préparée. Le code spécifie que les deux paramètres sont de type de données s (string).
La fonction mysqli_stmt_execute exécute l'instruction préparée.
Enfin, mysqli_stmt_fetch récupère la première ligne de l'ensemble de résultats et l'attribue à la variable $row.
En utilisant des requêtes paramétrées, ce code garantit que les instructions SQL malveillantes ne peuvent pas être exécutées, protégeant ainsi contre les attaques par injection SQL.
Pour plus de sécurité, il est fortement recommandé de chiffrer ou hachez le mot de passe de l'utilisateur avant de le stocker dans la base de données.
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!