Accueil > Forum > > > > XSS dans requete sql un peu spéciale
XSS dans requete sql un peu spéciale
mardi 20 novembre 2007 à 00:06:25 |
XSS dans requete sql un peu spéciale

mickadevelop
|
Bonjour à tous et toutes, J'ai une question concernant les requete mysql et la sécurité relative au injections sql. (cette requete est utilisé que pour une interface de gestion administrateur mais j'aimerais qu'elle soit quand meme clean au niveau des injections sql (des fois que le chat de l'admin ait l'habitude de marcher sur le clavier)) j'ai un formulaire avec 4 champs correspondant respectivements au nom de 2 tables mysql et de 1 colonne de chaque table (soit 2 colonnes) et je souhaite construire une requete (SELECT) qui sera constituer des variables saisies par l'admin (exemple : 'SELECT '. $champs_table_1.' FROM `'.$nom_table_1.'`') Je compte utiliser la fonction mysql_real_escape_string() pour chaque variable saisie par l'utilisateur mais cette écriture change par rapport a ce que j'avais l'habitude de faire à savoir : 'SELECT champ1 FROM `table1`WHERE champ1=\''.$variable_saisie_par_user.'\''. Je me demandais donc si il pouvait y avoir un souci de sécurité lorsque le nom du champs a selectionner ou le nom de la table etais directement rentré par l'utilisateur (ici je parle d'un souci de securité au niveau XSS) 2 ieme question : Est il possible avec mysql d'effectuer une meme requete pour plusieurs tables (par exemple : 'SELECT '.$champs_table_1.' FROM `table1`,`table2`) je pense que ce n'est pas possible mais je voulais une confirmation de la part de quelqu'un de plus experimenté que moi. Merci d'avance pour vos réponses sur le sujet.  mickadevelop
|
|
mardi 20 novembre 2007 à 01:33:46 |
Re : XSS dans requete sql un peu spéciale

neigedhiver
|
Salut,
D'une manière générale, il faut TOUJOURS protéger avec mysql_real_escape_string les données textes que l'on insère dans une base de données et qui proviennent d'une source externe (autre base de données, fichier, variables POST ou GET, etc).
TOUJOURS.
Sans ça, c'est systématiquement la porte ouverte à une faille XSS.
Pour les autres types de données, c'est moins sensible, puisque par exemple, les valeurs numériques n'ont pas besoin d'être entourées de guillemets dans la requete.
On peut s'assurer que les données numériques que l'on traite sont bien des nombres (intval(), transtypage avec (int) etc).
Pour ta deuxième question, oui, c'est tout à fait possible. Ca s'appelle une jointure.
La syntaxe la plus courante est proche de ce que tu as écris :
SELECT a.champ1, b.champA FROM tableA AS a, tableB AS b WHERE bidule='machin';
Des jointures plus complexes peuvent être faites, selon les résultats que l'on veut obtenir. On peut filtrer, grouper, trier, etc.
Pourquoi ne pas lire la doc de MySQL ?
http://dev.mysql.com/doc/refman/5.0/fr/join.html
|
|
mercredi 21 novembre 2007 à 01:27:43 |
Re : XSS dans requete sql un peu spéciale

mickadevelop
|
Coucou neigedhiver, tu viens de me refroidir en boulersant mon idée de départ sur l'impossibilité d'effectuer une requete pour plusieurs tables. Non en réalité je te remercie pour la jointure du tuyau euh .... non le tuyau de la jointure. desoler une journée devant un pc ca laisse des traces... Pour parler plus sérieusement je ne suis pas rentrer dans les details des requetes utilisant la jointure mais en regardant de loin et en me focalisant plus sur les problemes d'injections, meme en utilisant la fonction mysql_real_escape_string() il serait envisageable de faire une injection sql dans la partie definissant les champs et les tables pour modifier la requete et tirer des info dont on ne voulais pas donner l'acces. exemple : on rentre la variable $GET['variablesaisieparutilisateur']='tableb as b, tablec as c'; la requete va devenir : SELECT a.champ1, b.champA FROM tableA as a, tableb as b, tablec as c WHERE ... voila j'espere avoir ete clair dans ma pose du probleme et espere avoir votre avis sur la question et savoir si ce represente un reel risque et faut il effectuer un filtrage des variables lors de la saisie. merci  mickadevelop
|
|
mercredi 21 novembre 2007 à 02:21:17 |
Re : XSS dans requete sql un peu spéciale

neigedhiver
|
Réponse acceptée !
Si tu laisses l'utilisateur la possibilité de saisir directement une partie de la requête,alors oui, il y a une faille.
C'est pour cela qu'il existe des DBA (DataBase Administrator) qui sont payés rubis sur l'ongle pour gérer les droits de chaque utilisateur sur telle ou telle table.
Et c'est pour leur faciliter le travail que les moteurs de bases de données permettent de créer des vues (tout est dans la doc de mysql).
Plus concrètement, pour ton problème, tu as plusieurs solutions. Probablement aucune n'est miraculeuse...
Au lieu d'utiliser des champs textes, utiliser des listes déroulantes. Mais ça ne fait pas tout, puisqu'un formulaire peut être construit manuellement... Alors il faut vérifier avant la construction de la requête si les tables correspondent aux tables auquel on souhaite laisser l'accès.
On peut aussi parser la requête construite avant de l'exécuter pour en extraire les tables et tester les droits. Mais c'est bourrin et lourd...
Une autre solution est d'avoir plusieurs comptes utilisateurs sur la base de données, et de définir des droits très stricts pour chacun. On pourra alors utiliser l'un ou l'autre, suivant l'utilisateur connecté, pour effectuer les opérations. Si un utilisateur triche et tente d'accéder à une table qui lui est interdite, la requête échouera avec une erreur 1227 : Access denied; you need the xxxxxxx privilege for this operation, erreur qui peut être interceptée pour afficher un joli message d'erreur pour l'utilisateur.
La dernière solution que j'ai dans mon chapeau consiste à avoir confiance en son admin, à faire valider la requête construite avant validation, à veiller à ce que l'admin soit compétent, etc... Mais personne n'est infaillible, et même avec de la bonne volonté, on peut tout casser...
|
|
Cette discussion est classée dans : table, mysql, sql, champs, requete
Répondre à ce message
Sujets en rapport avec ce message
Requete SQL avec plusieurs champs [ par christuckers ]
Hello les CSistes !!Une petite question. J'ai besoin de faire une petite requete qui est vraiment mini mais qui m'enerve car je n'y arrive pas.Voici m
Afficher données de 2 tables dans un tableau [ par Chewba ]
Bonjour, Je cherche comment je peux faire pour afficher les données provenant de 2 tables différentes dans un tableau.J'ai une table Roster_members et
Affichage du plut grand au plutspetit [ par f1actu ]
Bonjour alors , j'ai une table "cla" et dans cette table cla , un champs qui se nomme "total" et je voudrai qui s'affiche du plus grand au plus petit
requete sql avec la variable php [ par soussan ]
sltj'ai un champs qui peut contenir des paraghraphe et je veux faire la selection sur ce champs à partir d'une zone de texte de recherche. je veux fai
Prob SQL [ par stu76 ]
Bonjour,J'ai un prob j'ai une base de données avec plusieurs tables, deux d'entres elles ont une relation de n-n ( plusieurs a plusieurs). Pour cela j
problème de requete SQL avec ID aléatoire [ par djinko ]
Bonsoir,Ayant chercher pendant des heures et des heures, je me tourne vers vous pour avoir une explication car franchement, je nage...J'ai crée un esp
Tableau dynamique [ par kenny18 ]
salut à tous,l'autre jour, j'ai demandé comment n'affiché que le champs renseignés de ma tabledans un tableau dynamique. Mathis49 m'a répondu ça :$req
un prob de requete [ par ombrey20 ]
j'ai un petit prob qui peut m'aider!!!!! est ce que c'est possible,si jamais on click sur un lien il execute une requete sachant que que cette requett
Probleme doublon lors d'un requete [ par magicjim ]
Bonjour,je fait une requete de type :$sql=mysql_query("SELECT * FROM table_essai ");while($rs = mysql_fetch_array($sql,MYSQL_ASSOC))ALors ele maffiche
Update [ par refkaben ]
Bonjour à tous;J'ai une requete Update, le syntaxe me parrait correcte mais ça ne fait rien, càd que les valeurs des champs que je veux modifier reste
Livres en rapport
|
Derniers Blogs
ROSLYN FLUENT APIS: ROSLYNHELPER NUGET PACKAGEROSLYN FLUENT APIS: ROSLYNHELPER NUGET PACKAGE par Matthieu MEZIL
Si vous utilisez Roslyn et que vous vous voulez vous simplifier le code du code rewriter, je vous conseille d'installer mon NuGet package RoslynHelper ....(read more) ...
Cliquez pour lire la suite de l'article par Matthieu MEZIL POUR RAPPEL ! LES SPéCIFICATIONS DES PROTOCOLES OFFICE ET SHAREPOINT SONT DISPONIBLES SUR MSDNPOUR RAPPEL ! LES SPéCIFICATIONS DES PROTOCOLES OFFICE ET SHAREPOINT SONT DISPONIBLES SUR MSDN par neodante
Quelle est le point commun entre : Microsoft il y a 10 ans et Apple aujourd'hui ? Réponse: avoir une politique de protocoles propriétaires et fermés :) Car pour rappel (si si je vous assure c'est important de le rappeler), la majorité des spécifications e...
Cliquez pour lire la suite de l'article par neodante JOYEUX ANNIVERSAIRE NIXJOYEUX ANNIVERSAIRE NIX par ebartsoft
Souhaitons un bon et joyeux anniversaire à notre hôte à tous, Nix.
Je ne le répéterais jamais assez mais sans lui rien ne serait possible. Il défit en permanence les lois de la gravité et comme il le dit si bien, si tu lui fais confiance ça devra...
Cliquez pour lire la suite de l'article par ebartsoft IMAGINE CUP 2012, MAKE A SIGN EN FINALEIMAGINE CUP 2012, MAKE A SIGN EN FINALE par junarnoalg
Voilà qui est fait, la nouvelle est officielle ! L'équipe belge "Make a Sign" va au pays des kangourous défendre son projet dans la catégorie Software Design. http://www.imaginecup.com/CompetitionsContent/Competition/WorldwideFinalists.aspx V...
Cliquez pour lire la suite de l'article par junarnoalg KINECT 1.5 IS OUT !KINECT 1.5 IS OUT ! par Vko
La version 1.5 du Kinect For Microsoft vient tout juste de sortir ! Plein de nouveautés: Tracking de squelette en Near Mode Détection en position assise Détection faciale avec un SDK dédié Documentation et des guideline (enfin) Un out...
Cliquez pour lire la suite de l'article par Vko
Logiciels
sDEVIS-FACTURES vlPRO (8.1.0.3)SDEVIS-FACTURES VLPRO (8.1.0.3)sDEVIS-FACTURES vlPRO a été mis au point pour les particuliers, créateurs, entrepreneurs, artisa... Cliquez pour télécharger sDEVIS-FACTURES vlPRO 974 Application Server (12.2.4.6)974 APPLICATION SERVER (12.2.4.6)Développez de puissantes applications dans un environnement de 'cloud computing', clusterisé, séc... Cliquez pour télécharger 974 Application Server vPicture (1.4.2.1)VPICTURE (1.4.2.1)Avec vPicture, hébergez vos images facilement et rapidement.
vPicture est un utilitaire simple, ... Cliquez pour télécharger vPicture Easy-Planning (2.2.1.6)EASY-PLANNING (2.2.1.6)Easy-Planning permet de créer des plannings sous la représentation de diagrammes et est adapté au... Cliquez pour télécharger Easy-Planning COM-BACKUP (2.0)COM-BACKUP (2.0)
COM-BACKUP est un logiciel de sauvegarde qui permet de planifier les sauvegardes de vos dossiers ...
Cliquez pour télécharger COM-BACKUP
|