sql >> Databasteknik >  >> RDS >> Mysql

Förebyggande mot MySQL-injektion

Använd förberedda uttalanden

Vad de gör är att först skicka en version av frågan med platshållare för data. Frågan är verifierad och förberedd. Om du lyckas kan du skicka värdena som databasen säkert kommer att infoga i den förberedda frågan.

Det finns tre alternativ:

MySQLi-tillägget

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

PDO-tillägget

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

Råfrågor via valfritt tillägg

Jag tänker inte ge ett exempel eftersom de andra två metoderna är vida överlägsna.



  1. MySQL lagrad procedur orsakar problem?

  2. hur man infogar arabiska i mysql från asp.net C#

  3. Finns det en begränsning för längden på frågan i mysql?

  4. Python:Hur får jag tid från ett datetime.timedelta-objekt?