Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Zapobieganie wstrzykiwaniu MySQL

Użyj przygotowanych oświadczeń

To, co robią, to najpierw wysyłanie wersji zapytania z symbolami zastępczymi na dane. Zapytanie jest weryfikowane i przygotowywane. Jeśli się powiedzie, możesz wysłać wartości, które baza danych bezpiecznie wstawi do przygotowanego zapytania.

Istnieją trzy opcje:

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

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

Surowe zapytania za pośrednictwem dowolnego rozszerzenia

Nie będę podawać przykładu, ponieważ pozostałe dwie metody są znacznie lepsze.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak uzyskać CakePHP bake, aby znaleźć mysql.sock i rozpoznać MySQL podczas korzystania z MAMP na Mac OSX?

  2. Nowy sterownik MySQL powoduje wyjątek java.sql.SQLNonTransientConnectionException:wymagany jest CLIENT_PLUGIN_AUTH

  3. Jak wstawić dane do MySQL z automatycznym przyrostem klucza podstawowego?

  4. Po zduplikowanym kluczu aktualizuj tylko wartości Null lub puste

  5. MySQL — między miesiącami (zamiast sygnatury czasowej)