-
PHP et requêtes mysqli
Bonjour !
J'ai de nombreux scripts comportant actuellement des requêtes écrites "mysql_query".
Chaque fois que j'ouvre une discussion sur d'autres forums, les répondants me traitent littéralement comme un délinquant, m'écrivant que je ne dois plus les utiliser mais, à la place, utiliser la "merveilleuse" requête "mysqli_query".
Bon, d'accord, moi, je veux bien.
Mais lorsque je pose la question : « Comment dois-je modifier mes scripts pour les mettre au goût du jour et les rendre ainsi plus sécuritaires ? », il n'y a soudain plus personne pour me répondre !
Récemment inscrit sur ce site, j'espère qu'il se trouvera ici des geeks en mesure de conseiller le pépé amateur que je suis pour effectuer cette transition...
D'avance, je les en remercie !
-
Ce document (en anglais) est une bonne base de travail déjà : https://wikis.oracle.com/display/mys...ting+to+MySQLi
Mais attention, il ne suffit pas juste de rajouter un "i" pour que tout change ! Il va falloir que tu regardes aussi du côté des requêtes préparées par exemple pour améliorer la sécurité de ton code, et sûrement pas mal de TNR et débugage pour les changements de comportements entre les deux pilotes.
Tu as aussi ici une petite page sympa qui reprend pas mal de notions importantes : http://www.php.net/manual/fr/mysqli.overview.php
Et, enfin, un résumé de toutes les fonctions mysqli et leur utilité : http://www.php.net/manual/fr/mysqli.summary.php
Bon courage !
-
Merci beaucoup pour ta réponse !
Des nuits blanches en perspective, donc.
Dans un premier temps, je voudrais simplement savoir si, en remplaçant uniquement mysql par mysqli ça fonctionnera quand même.
Après, je m'attellerai à assimiler les requêtes préparées.
Je pense qu'ayant une dizaine de scripts d'environ 5000 lignes de code au total cela ne devrait pas me prendre des semaines de travail.
Ou alors, ignorant que je suis, je sous-estime la « perversité » informatique et dois me préparer au pire !
Qu'en penses-tu ?
-
salut,
attention, c'est pas les requêtes préparées qui font la sécurité du tout, c'est le fait de correctement récupérer les valeur que tu as dans $_POST ou $_GET dés que tu récupère un nombre il faut utiliser un intval() ou floatval() ou doubleval() pour s'en assurer
toujours tester le contenu d'une chaine de caractères avec une regexp quand c'est possible...
php est faiblement typé et une variable peut changer de type contrairement au sgbd qui sont fortement typé dont les colonnes des tables ne permettent pas n'importe quel type de cast ou de remplissage une fois leur type fixé...
ce qui donne l'illusion de la sécurité c'est si tu utilises les bind de valeur pour les requêtes préparées du coup ça teste si tu utilises le bon type vu que tu le décris explicitement lors du passage de valeur...
je te l'ai déjà dit l'idéal en terme de sécurité c'est les procédures stockées avec un utilisateur avec seulement le droit "grant execute"...
ensuite faut pas oublier d'empêcher des attaques via ftp... ne jamais croire ce qui vient du navigateur... utiliser gd par exemple pour tester si tu as bien à faire à une image... etc... d'ordre général ne pas permettre l'exécution de fichiers uploadés par ftp ou formulaire s'ils ne viennent pas de toi...
toujours empêcher le listing des fichiers et répertoires et idéalement utiliser des techniques masquant l'arborescence des ressources (url rewriting, passer par un script php qui récupère la ressources, etc...)
-
Merci d'intervenir dans la discussion, Eric.
Dans l'ensemble, j'ai bien compris...
Sauf "gd pour tester"... gd ?
En ce qui concerne l'accès aux répertoires, c'est une des toutes premières mesures que j'ai prises.
Sur un autre sujet, j'aurais besoin d'aide pour des regexp.
Je vais ouvrir une autre discussion pour cela.
Merci encore !
-
gd, c'est une des 2 bibliothèques de manipulation d'images dans php...
je rajouterais aussi l'utilisation de jeton aléatoire entre php coté et javascript coté client pour empêcher le vol de session par les 2 principales techniques d'attaques liées à ça...