Sécurité des bases de données

Signaler
Messages postés
694
Date d'inscription
lundi 5 décembre 2005
Statut
Membre
Dernière intervention
8 janvier 2014
-
Messages postés
6063
Date d'inscription
dimanche 13 avril 2003
Statut
Modérateur
Dernière intervention
15 juillet 2011
-
Bonjour,



Je construit un site internet composé de deux parties :

- une partie frontale qui affiche les offres de produits aux clients

- une partie "office" qui permet au propriétaire de modifier ses offres.



Les deux parties sont totalement distinctes, mais fonctionnent autour de la même base.

En parcourant l'interface myphpadmin, j'ai trouvé la possibilité
d'associer plusieurs utilisateurs à la base, mais avec des droits
d'accès différents. Lors de la conception, j'ai inséré deux
utilisateurs :

- anonyme représentant les internautes de la partie frontale avec uniquement le droit select sur les tables

- propriétaire représentant les internautes utilisant la partie
"office" avec des droits en insert, select, update, delete sur les
tables



L'idée était de disposer d'un mécanisme de protection
supplémentaire de la base, sachant que les pages de la partie frontale
sont reliées à un petit script utilisant uniquement la connexion avec
l'utilisateur anonyme, tandis que les pages "office" sont reliées à un
script utilisant la connexion "privilégiée". Cela permettait, à mon
avis, de placer une sécurité au niveau de la base elle-même, en plus
des mécanismes qui peuvent être utilisés au niveau application
(sessions, cryptage...). Les niveaux sont utiles, à mon sens, parce
qu'ils permettent de figer, une fois pour
toutes, le rôle de chaque internaute par rapport à la base de données.
Tout internaute se connecte sous l'identité "anonyme" sans le savoir.
Le propriétaire se connecte sous sa propre identité, à travers une
entrée de session (login, mdp)



Cependant, quand j'ai voulu tester le site chez l'hebérgeur, je me suis
trouvé face à une interface m'interdisant la création de deux
utilisateurs différents. En ayant fait état à travers le forum de
l'hébergeur, j'ai eu plusieurs réponses de la part de l'hébergeur
:

- "Bonjour, je ne comprend pas l'interet d'avoir 2 utilisateurs mysql pour
un seul site ?????? C'est la premiere fois que je vois une gestion
d'utilisateur comme ca. Normalement c'est le programme / site que tu
développe qui gere les utilisateurs et non la base de donnée. La BD
sert uniquement à stocker des informations"

- "Nous ne pouvons fournir 2 utilisateurs avec niveaux différents car
les
applications ne se font pas comme ça et l'avantage serait nul"..."Le
fait d'avoir 2 utilisateurs ne protège en rien les données. Il
faudrait que celui avec les droits n'existe pas DU TOUT au niveau du
web pour que la sécurité soit totale. Ce n'est pas possible puisque le
proprio doit pouvoir passer par le web pour modifier...donc sécurité
inutile"



Finalement, la solution qu'il m'ont proposé est d'utiliser l'unique
connexion dont dispose chaque compte (c'est à dire, et ils me l'ont
bien confirmé eux même, que "Les connections à la base de données se
feront toujours avec l'utilisateur ayant tous les droits sur la base.")
et de construire une table supplémentaire dans la base pour stocker
l'unique utilisateur privilégié. Donc, en plus du travail suppl pour
sécuriser cette table, j'ai l'impression de perdre un niveau de
sécurité dans l'application.



Ma question est la suivante :

Est-ce que je me trompe dans la conception de l'application en
utilisant les utilisateurs et leurs droits disponibles directement au
niveau de la base de donnée, ou est-ce que l'hébergeur fait des
économies sur les comptes de ses hébergés au détriment de leur
sécurité (C'est direct, mais ça m'interpelle...)



Merci pour vos réponses...

Bonne journée..

6 réponses

Messages postés
6063
Date d'inscription
dimanche 13 avril 2003
Statut
Modérateur
Dernière intervention
15 juillet 2011
37
Salut,

Oui, tu permets en sécurité, mais la sécurité au niveau de la base peux etre decalé sur l'application.
Car tu user guest, auras sa zone, et ton admin auras un cookie pour se propager de page en page, peux etre une connexion ssl pour l'admin, mais la je ne connais pas la mise a place de se systeme et si c'est possible en hebergement mutualise.
La solution c'est un serveur dedie mais la c'est un autre prix ;-)

bon courage.
Messages postés
559
Date d'inscription
jeudi 25 juillet 2002
Statut
Membre
Dernière intervention
5 septembre 2007
1
Bonjour,

A mon avis, tu ne te trompes pas. Cependant, l'hebergeur n'a pas completement tort non plus, dans le sens ou la sécurité est suffisante en passant par le web uniquement.
En serveur dédié, ca reste une sécurité de plus qui ne coute pas grand chose et qui sert toujours...

Mindiell Software
Messages postés
694
Date d'inscription
lundi 5 décembre 2005
Statut
Membre
Dernière intervention
8 janvier 2014
16
Bonjour Mindiell,



Quand je posais la question j'avais une certaine idée du type de dégats
que peut subir une base de donnée ainsi exposée avec les pleins droits
du propriétaire.

Il existe une forme d'attaque appelée injection sql qui permettrait de
détourner une requête de son fonctionnement prévu. Ainsi, si j'ai bien
compris, il est possible d'interroger une base, sans même parfois
connaître sa structure. Il suffit pour cela qu'un champ de la base soit
ouvert à travers un champ de formulaire HTML (un livre d'or, une
fenetre de connexion...). Si la réception des informations dans ce
champ n'est pas traitée, elle laisserait la porte ouverte à ce genre de
dysfonctionnement.



Mon idée était la suivante : si malgré les protections quis sont
placées au niveau applicatif, quelquechose fonctionne mal et qu'un
utilisateur peut agir ainsi, s'il n'est que connecte à la base avec un
droit select, ses actions se limiteront à des lecture d'infos, tandis
que s'il est connecté avec les pleins droits... (update password=""...,
delete *...)



Voila..

Peut être que je me trompe...
Messages postés
559
Date d'inscription
jeudi 25 juillet 2002
Statut
Membre
Dernière intervention
5 septembre 2007
1
Ah, intéressant comme attaque, mais, comme tu le dis, en vérifiant un minimum tes champs tu évites cette attaque.
Comme je l'ai dit, c'est un plus (que je préfère moi aussi)...

Mindiell Software
Messages postés
694
Date d'inscription
lundi 5 décembre 2005
Statut
Membre
Dernière intervention
8 janvier 2014
16
Merci pour ces précisions.
Bonne fin de journée.

NB. le bouton "Réponse acceptée" ne fonctionne plus chez moi...
Messages postés
6063
Date d'inscription
dimanche 13 avril 2003
Statut
Modérateur
Dernière intervention
15 juillet 2011
37
Salut,

Dans tes validations de champ, il suffit d'interdire les mots suivant "delete", ";", "scripts" , "'"quote, ....
il faut limiter un maximum les espaces (faire des trim sur les chaines)
Un bon moyen de valider les champs c'est d'utiliser une regexp.

En ado ou ado.net, il faut utiliser les parametres nommés des commandes.
Cela permet de ne pas s'inquité des formats (doublage des quotes)
probleme de date ....

Allez bon courage.