je me demande ce que les gens ici présent pensent de la sécurité
(contre les attaques de type SQL-Injection) des requêtes préparées de
MySQL, utilisées avec des "placeholders".
Exemples tirés de la doc PHP5 :
INSERT INTO City (ID, Name) VALUES (?, ?);
SELECT Name FROM City WHERE name = ?;
J'ai fait quelques tests et regardé sur le Net, tout le monde semble dire
que cette technique est OK d'un point de vue Sécurité, le serveur MySQL
sachant faire la différence entre la requête SQL et la valeur d'un des
champs et ne permettant donc pas de manipuler la requête.
Confirmation, infirmation et explication du fonctionnement interne de
MySQL bienvenus ...
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Julien Salgado
Nicob a écrit :
Salut,
je me demande ce que les gens ici présent pensent de la sécurité (contre les attaques de type SQL-Injection) des requêtes préparées de MySQL, utilisées avec des "placeholders".
Exemples tirés de la doc PHP5 :
INSERT INTO City (ID, Name) VALUES (?, ?); SELECT Name FROM City WHERE name = ?;
C'est dans la doc de mysqli qu'on trouve cet exemple il me semble, le seul intérêt que je trouve à mysqli est de pouvoir séparer la chaine de caractères des autres types (fonction bind_param), par contre il n'y a pas de vérification plus poussée sur les chaines (on peut mettre un point-virgule dans une chaine) faite par bind_param. Pour ce qui est de la fonction de query je n'ai pas regardé le détail du fonctionnement, mais il semble que les dernières versions de Mysql soit capables de faire du typage et de la vérifications de format avec un simili de procédures stockées.
J'ai fait quelques tests et regardé sur le Net, tout le monde semble dire que cette technique est OK d'un point de vue Sécurité, le serveur MySQL sachant faire la différence entre la requête SQL et la valeur d'un des champs et ne permettant donc pas de manipuler la requête.
Dans toutes les docs concernant mysqli il est précisé qu'il n'est plus nécessaire d'utiliser la fonction mysql_real_escape_string, ce qui laosse à supposer que c'est bon. Mais je n'ai jamais vu écrit explicitement que l'utilisation de ces fonctions empéchait l'injection et surtout par quel mécanisme. Et surtout comment fait-on quand on veut faire une base de donnée sur les exemples d'injection...
Confirmation, infirmation et explication du fonctionnement interne de MySQL bienvenus ...
De même,
-- Julien
Nicob a écrit :
Salut,
je me demande ce que les gens ici présent pensent de la sécurité
(contre les attaques de type SQL-Injection) des requêtes préparées de
MySQL, utilisées avec des "placeholders".
Exemples tirés de la doc PHP5 :
INSERT INTO City (ID, Name) VALUES (?, ?);
SELECT Name FROM City WHERE name = ?;
C'est dans la doc de mysqli qu'on trouve cet exemple il me semble, le
seul intérêt que je trouve à mysqli est de pouvoir séparer la chaine de
caractères des autres types (fonction bind_param), par contre il n'y a
pas de vérification plus poussée sur les chaines (on peut mettre un
point-virgule dans une chaine) faite par bind_param. Pour ce qui est de
la fonction de query je n'ai pas regardé le détail du fonctionnement,
mais il semble que les dernières versions de Mysql soit capables de
faire du typage et de la vérifications de format avec un simili de
procédures stockées.
J'ai fait quelques tests et regardé sur le Net, tout le monde semble dire
que cette technique est OK d'un point de vue Sécurité, le serveur MySQL
sachant faire la différence entre la requête SQL et la valeur d'un des
champs et ne permettant donc pas de manipuler la requête.
Dans toutes les docs concernant mysqli il est précisé qu'il n'est plus
nécessaire d'utiliser la fonction mysql_real_escape_string, ce qui
laosse à supposer que c'est bon. Mais je n'ai jamais vu écrit
explicitement que l'utilisation de ces fonctions empéchait l'injection
et surtout par quel mécanisme. Et surtout comment fait-on quand on veut
faire une base de donnée sur les exemples d'injection...
Confirmation, infirmation et explication du fonctionnement interne de
MySQL bienvenus ...
je me demande ce que les gens ici présent pensent de la sécurité (contre les attaques de type SQL-Injection) des requêtes préparées de MySQL, utilisées avec des "placeholders".
Exemples tirés de la doc PHP5 :
INSERT INTO City (ID, Name) VALUES (?, ?); SELECT Name FROM City WHERE name = ?;
C'est dans la doc de mysqli qu'on trouve cet exemple il me semble, le seul intérêt que je trouve à mysqli est de pouvoir séparer la chaine de caractères des autres types (fonction bind_param), par contre il n'y a pas de vérification plus poussée sur les chaines (on peut mettre un point-virgule dans une chaine) faite par bind_param. Pour ce qui est de la fonction de query je n'ai pas regardé le détail du fonctionnement, mais il semble que les dernières versions de Mysql soit capables de faire du typage et de la vérifications de format avec un simili de procédures stockées.
J'ai fait quelques tests et regardé sur le Net, tout le monde semble dire que cette technique est OK d'un point de vue Sécurité, le serveur MySQL sachant faire la différence entre la requête SQL et la valeur d'un des champs et ne permettant donc pas de manipuler la requête.
Dans toutes les docs concernant mysqli il est précisé qu'il n'est plus nécessaire d'utiliser la fonction mysql_real_escape_string, ce qui laosse à supposer que c'est bon. Mais je n'ai jamais vu écrit explicitement que l'utilisation de ces fonctions empéchait l'injection et surtout par quel mécanisme. Et surtout comment fait-on quand on veut faire une base de donnée sur les exemples d'injection...
Confirmation, infirmation et explication du fonctionnement interne de MySQL bienvenus ...