sql >> Database teknologi >  >> RDS >> Mysql

Forebyggelse mod MySQL-injektion

Brug forberedte udsagn

Det, de gør, er først at sende en version af forespørgslen med pladsholdere til data. Forespørgslen er verificeret og forberedt. Hvis det lykkes, kan du sende de værdier, som databasen sikkert vil indsætte i den forberedte forespørgsel.

Der er tre muligheder:

MySQLi-udvidelsen

$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-udvidelsen

// 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å forespørgsler via enhver udvidelse

Jeg vil ikke give et eksempel, fordi de to andre metoder er langt overlegne.



  1. SQL Server DELETE – Fjernelse af en eller flere rækker fra en tabel med lidt avancerede scenarier

  2. Hvorfor afgrænser brugt med lagret procedure i mysql?

  3. CodeIgniter aktive posters problemer med at kalde flere lagrede procedurer

  4. SQL - Hvordan finder man det højeste tal i en kolonne?