J'ai regardé dans opencart, qui est écrit en PHP.PHP SQL injection possibilité
Si vous regardez le fichier php suivant,
https://github.com/opencart/opencart/blob/master/upload/admin/model/customer/customer.php
L'instruction SQL ressemble à ceci
$this->db->query("INSERT INTO " . DB_PREFIX . "customer
SET customer_group_id = '" . (int)$data['customer_group_id'] . "',
firstname = '" . $this->db->escape($data['firstname']) . "',
lastname = '" . $this->db->escape($data['lastname']) . "',
email = '" . $this->db->escape($data['email']) . "',
telephone = '" . $this->db->escape($data['telephone']) . "',
custom_field = '" . $this->db->escape(isset($data['custom_field']) ? json_encode($data['custom_field']) : json_encode(array())) . "',
newsletter = '" . (int)$data['newsletter'] . "',
salt = '',
password = '" . $this->db->escape(password_hash($data['password'], PASSWORD_DEFAULT)) . "',
status = '" . (int)$data['status'] . "',
safe = '" . (int)$data['safe'] . "',
date_added = NOW()");
La méthode recommandée pour éviter l'injection PHP SQL est d'utiliser les commandes préparées .
Ma question est de savoir comment ce code n'utilise pas les instructions préparées, ce code est-il vulnérable à l'injection sql?
Je ne suis pas un expert en php alors je pourrais manquer quelque chose d'évident ici.
EDIT:
Permettez-moi d'énumérer les raisons pour lesquelles je suis un peu inquiet d'accepter que ce code est vulnérable.
OpenCart (https://github.com/opencart/opencart) est un projet open source populaire avec plus de 200 fourches. C'est en fait une solution de panier d'achat (e-commerce), donc le développeur aurait pensé à la sécurité, et les injections sql comme celle-ci sont l'une des premières choses qu'ils auraient vérifiées.
Il ne ressemble à une sorte d'échappements est fait en utilisant
$this->db->escape($data['telephone'])
Oui, ce code est vulnérable, car il n'utilise pas [Prepared Statements] (https://www.w3schools.com/php/php_mysql_prepared_statements.asp), ** Escaping strings n'est plus la solution recommandée pour SQL Injection, et il ne suffit PAS ** – GrumpyCrouton
duplication possible de [Comment puis-je empêcher l'injection SQL en PHP?] (https://stackoverflow.com/questions/60174/how-can-i-prevent-sql-injection-in-php – Qirel
Le seul moyen de protection contre l'injection SQL consiste à utiliser des instructions préparées.Ceci est également mieux dans de nombreux autres aspects - évitez d'échapper, utilisez simplement des instructions préparées. – Qirel