Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Prävention gegen MySQL-Injektion

Verwenden Sie vorbereitete Anweisungen

Sie senden zunächst eine Version der Abfrage mit Platzhaltern für Daten. Die Abfrage wird verifiziert und vorbereitet. Bei Erfolg können Sie die Werte senden, die die Datenbank sicher in die vorbereitete Abfrage einfügt.

Es gibt drei Möglichkeiten:

Die MySQLi-Erweiterung

$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();

Die PDO-Erweiterung

// 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();

Rohabfragen über beliebige Erweiterungen

Ich werde kein Beispiel geben, weil die beiden anderen Methoden weit überlegen sind.