Mysql
 sql >> Base de données >  >> RDS >> Mysql

Prévention contre l'injection MySQL

Utilisez des déclarations préparées

Ce qu'ils font, c'est d'abord envoyer une version de la requête avec des espaces réservés pour les données. La requête est vérifiée et préparée. En cas de succès, vous pouvez envoyer les valeurs que la base de données insérera en toute sécurité dans la requête préparée.

Il y a trois options :

L'extension MySQLi

$stmt = $mysli->prepare('INSERT INTO costumer (costumer_ID,  first_name, last_name, birth_date, adress,  city, state, postal_code, country, phone, email_client,username, password, Credit_Card, Credit_CardType) 
                         VALUES 
                         (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?');

$stmt->bindParam('issssssssssssss', $_POST['costumer_ID'], ..., $_POST['Credit_CardType']);
$stmt->execute();

L'extension PDO

// use native prepared statements if supported
$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);

$stmt = $pdo->prepare('INSERT INTO costumer (costumer_ID,  first_name, last_name, birth_date, adress,  city, state, postal_code, country, phone, email_client,username, password, Credit_Card, Credit_CardType) 
                       VALUES 
                       (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?');

$stmt->bindParam(1, $_POST['costumer_ID'], PDO::PARAM_INT);
...
$stmt->bindParam(15, $_POST['Credit_CardType']);

$stmt->execute();

Requêtes brutes via n'importe quelle extension

Je ne vais pas donner d'exemple car les deux autres méthodes sont de loin supérieures.