|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Membre actif
![]() Inscription : avril 2007 Messages : 483 ![]() |
Bonjour,
Je voudrais savoir s'il existe une fonction php ou une méthode pour éviter les injections sql depuis un formulaire classique vers une base de données oracle Je sais qu'il existe une fonction php qui fait cela pour les bases de données MySQL mais je n'ai encore rien trouvé pour faire la même chose avec les bases de données oracle. Quelqu'un s'est-il déjà penché sur la question ? Merci d'avance pour vos réponses |
|
|
00
|
|
|
#2 |
|
Membre confirmé
![]() Inscription : janvier 2006 Messages : 178 ![]() |
Le mieux est d'utiliser des requêtes préparées, car cela empêche toute injection SQL et de plus permet d'utiliser le cache de requêtes d'Oracle (Shared Pool) au mieux, et ce gratuitement
En gros quelque soit le langage, il faut avec Oracle toujours utiliser des requêtes préparées si on veut une appli qui tienne la route avec pas mal d'utilisateurs. (je peux détailler si tu veux) Et le top (à mon sens) c'est d'utiliser des procédures stockées PL/SQL appelées via des requêtes préparées. Quelle API utilises-tu pour te connecter à Oracle : OCI8 ? PDO ? |
|
|
00
|
|
|
#3 |
|
Membre actif
![]() Inscription : avril 2007 Messages : 483 ![]() |
J'utilise OCI8
Si j'ai bien compris ce que tu me dis concerne les requetes que j'exécute lors du chargement d'une page, or ce que je voudrais c'est éviter les requetes SQL saisies dans les champs d'un formulaire Ou bien je me trompe ^^" A vrai dire je n'ai pas très bien compris tous ces termes que tu as dis Je ne connais pas très bien oracle je l'utilise car on m'a demandé de créer une appli avec oracle pour abse de données, sinon j'utilise plus couramment MySQL pour les appli php. Je veux bien que tu détailles plus s'il te plait ^^ |
|
|
00
|
|
|
#4 | ||||
|
Membre confirmé
![]() Inscription : janvier 2006 Messages : 178 ![]() |
Pas de problème
Une requête préparée est une requête SQL où on définit des emplacements pour chaque paramètre de la requête. Code :
SELECT nom, prenom FROM Utilisateur WHERE IdUtilisateur = :nomutilisateur; Une procédure stockée est une fonction enregistrée sur le serveur de base de données, compilée. L'utilisation de SP (stored procedures) a de très nombreux avantages sous Oracle (moins sous MySQL) en termes de performances et de sécurité. Si tu souhaites en utiliser je pourrai te montrer des exemples, et tu peux notamment aller sur le forum PL/SQL de developpez.com. Par exemple : http://www.developpez.net/forums/sho...d.php?t=584065 où il y a une belle procédure Avant un exemple, je te montre l'API que je me suis créée au-dessus d'OCI8 pour me simplifier grandement la tâche dans toutes mes pages PHP Code :
Maintenant un exemple avec appel de procédure stockée qui renvoie deux curseurs, que l'on lit : Code :
- on initialise le tableau qui va contenir les variables liées (bind variables) - on construit la requête avec les emplacements de variables - on remplit le tableau des variables de liens - on exécute la requête - on lit les 2 curseurs Grâce à l'API, le code est beaucoup plus concis qu'en OCI8 direct. J'espère que c'est clair. |
||||
|
|
00
|
|
|
#5 |
|
Membre actif
![]() Inscription : avril 2007 Messages : 483 ![]() |
Merci pour cette explication.
C'est relativement clair, même si je ne comprends pas tout ^^" (mais avec un peu de recherche sur les fonctions ça devrait aller mieux ! ) Je reviendrais te demander si j'opte pour cette solution et que je rencontre des soucis ^^ |
|
|
00
|
|
|
#6 |
|
Membre confirmé
![]() Inscription : janvier 2006 Messages : 178 ![]() |
Sinon tu peux aussi jeter un coup d'oeil sur PDO pour Oracle. PDO est une interface commune d'accès aux SGBD en PHP : tu utiliserais exactement le même code pour MySQL et pour Oracle. Les requêtes préparées sont très simples à utiliser avec PDO.
Par contre, tu seras un peu limité si tu utilises les procédures stockées (pas de retour de plusieurs curseurs en même temps par exemple N'hésites pas si tu as d'autres questions. |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com