sql >> Base de Datos >  >> RDS >> Mysql

Prevención contra la inyección de MySQL

Usar declaraciones preparadas

Lo que hacen es enviar primero una versión de la consulta con marcadores de posición para los datos. La consulta es verificada y preparada. Si tiene éxito, puede enviar los valores que la base de datos insertará de forma segura en la consulta preparada.

Hay tres opciones:

La extensión 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();

La extensión 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();

Consultas sin procesar a través de cualquier extensión

No voy a dar un ejemplo porque los otros dos métodos son muy superiores.