par
Sékiltoyai » 02 oct. 2007, 14:10
La suggestion d'avoir un utilisateur autorisé uniquement pour réaliser des SELECT, allait dans ce sens.
L'avantage c'est au niveau de la base de donnée que l'interdiction est faite, et pas dans le code php.
Oui et dans ce cas, c'est vraiment mais vraiment imparable, si la requète DELETE est interdite, alors le serveur SQL n'acceptera jamais de faire une seule suppression même si elle est habilement dissimulée dans un SELECT.
Sinon, si tu cherches toujours à le faire en PHP, une solution serait à la rigueur de proposer de choisir par exemple :
-Les champs à sélectionner (nom de la table et nom du champ)
-Les tables à choisir (avec une option pour l'inclure par un JOIN avec des conditions)
-Les conditions (fonction de comparaison, et arguments, le tout en permettant de choisir entre chaque condition l'opérateur logique)
-La limite
-L'ordre
Et à la fin tu regroupes tout. Le principe étant que plus tu divises la requète, plus tu brides l'utilisateur (si tu ne réimplémentes pas toutes les fonctionnalités du serveur), mais plus tu te permets de vérifier de manière sûre et facile la validité de la requète. Bref, il faut que tu fasses un choix dans les fonctionnalités pour savoir lesquelles sont non souhaitées, lesquelles sont souhaitables, et lesquelles sont indispensables (est il nécessaire de pouvoir faire des sous-requètes, des triggers, des tables temporaires, des JOIN, des GROUP BY, …) , pour ensuite pouvoir faire le meilleur compromis entre la sécurité souhaitée, la facilité d'implémentation, et les fonctionnalités, mais tout ce travail, c'est à toi de le faire.
[quote="iclo"]
La suggestion d'avoir un utilisateur autorisé uniquement pour réaliser des SELECT, allait dans ce sens.
L'avantage c'est au niveau de la base de donnée que l'interdiction est faite, et pas dans le code php.[/quote]
Oui et dans ce cas, c'est vraiment mais vraiment imparable, si la requète DELETE est interdite, alors le serveur SQL n'acceptera jamais de faire une seule suppression même si elle est habilement dissimulée dans un SELECT.
Sinon, si tu cherches toujours à le faire en PHP, une solution serait à la rigueur de proposer de choisir par exemple :
-Les champs à sélectionner (nom de la table et nom du champ)
-Les tables à choisir (avec une option pour l'inclure par un JOIN avec des conditions)
-Les conditions (fonction de comparaison, et arguments, le tout en permettant de choisir entre chaque condition l'opérateur logique)
-La limite
-L'ordre
Et à la fin tu regroupes tout. Le principe étant que plus tu divises la requète, plus tu brides l'utilisateur (si tu ne réimplémentes pas toutes les fonctionnalités du serveur), mais plus tu te permets de vérifier de manière sûre et facile la validité de la requète. Bref, il faut que tu fasses un choix dans les fonctionnalités pour savoir lesquelles sont non souhaitées, lesquelles sont souhaitables, et lesquelles sont indispensables (est il nécessaire de pouvoir faire des sous-requètes, des triggers, des tables temporaires, des JOIN, des GROUP BY, …) , pour ensuite pouvoir faire le meilleur compromis entre la sécurité souhaitée, la facilité d'implémentation, et les fonctionnalités, mais tout ce travail, c'est à toi de le faire.