Bonjour,

Nous développons un site avec Symfony 3 et nous devons héberger dans une BD MySQL des données confidentielles (hôpital).

Plusieurs questions :

Quelle(s) méthode(s) me conseillez-vous ?
Est-ce que MySQL est à proscrire niveau sécurité ?
Est-ce qu'une adresse du genre https serait intéressant ?
J'ai entendu parler d'un cryptage avec clé de cryptage, ça vous dit quelques chose ?

Merci d'avance pour votre aide.

4 réponses


Salut,

Je ne pense pas que chiffrer l'intégralité de ta base soit une bonne solution, cela te demandera de chiffrer/déchiffrer avant chaque action en base. De mon point de vue, ça risque de ralentir considérablement tes performances.

Parcontre tu peux peut-être te pencher sur des infrastructures de type:
Le ou les serveurs web ont un accès intrernet pour que tes visiteurs puissent consulter ton site et un lien lan qui te permet de communiquer avec le ou les serveurs mysql qui possède eux uiquement une interface lan.
Tu peux également chiffrer tes disques durs où tu héberges tes données cependant si c'est de l'hébergement mutualisé je ne pense pas que ce soit disponible...

Je pense qu'il nous faut un peu plus d'information sur ton projet afin de te répondre au mieux.
Seule chose pour de l'hébergement de données de santé il faut que ton hébergeur soit agréé HDS.
http://esante.gouv.fr/services/referentiels/securite/hebergeurs-agrees ton hébergeur peut-être listé mais le service que tu souscris n'est pas agréé, il faut bien se renseigner.

beegees
Auteur

Salut,

Grand merci pour ta réponse rapide.

Que veux-tu dire par ceci :

 un lien lan qui te permet de communiquer avec le ou les serveurs mysql qui possède eux uiquement une interface lan.

Encore un grand merci à toi et agréable soirée.

Salut,

Pas de problème ;)
Un schéma sera plus clair: http://imgur.com/a/Evlmg
Tu as ton/test serveur(s) web qui est interrogeable sur internet et ton/tes serveur(s) de BDD qui sont uniquement interrogeable en local (non accessible sur internet).

Ce genre d'infrastructure te permet déjà d'éviter une intrusion par le net. Ensuite, il faut aussi que ton site soit sans faille.
https://www.scaleway.com/ propose des serveurs à bas prix pour commencer et scalable car tu peux conserver ton disque et passer sur des offres plus performantes en rattachant ton disque dur. De plus, il faut juste prendre une/plusieurs ip(s) pour ton/tes serveur(s) web et ensuite tu ne prend pas d'ip pour ton/tes serveurs de BDD.

Tu auras une ip locale pour tes serveurs de BDD et c'est cette adresse qu'il faudra que tu configures pour le driver mysql dans symfony.

Merci, passe une très bonne soirée également :)

Rajoutons une notion importante, Chiffrer/déchiffrer demande donc d'avoir password (chiffrage symetrique) ou une paire de clé (chiffrage asymétrique).

Dans les deux cas, sauf chiffrement end to end tu te retrouves à avoir, physiquement sur le serveur sous forme de fichier, ou en dure dans ton code, ce qui te permettra de chiffrer/déchiffrer tes informations.

Ce qui veut dire que quelques soits la stratégie mise en place coté BDD, si le hacker accède à ton code source, il sera aisement capable de déchiffrer et donc accéder à ta BDD.

Ta stratégie devra donc être globale.

Le cas le plus simple à résoudre :
Utilisateur Alice a besoin d'accéder uniquement à ces données, mais aucune d'un autre utilisateur. Tu peux donc chiffrer/déchiffrer l'information directement avec le mot de passe d'Alice, elle le saisira à chaque phase de chiffrement/déchiffrement. Ou le stocker en session qui s'expire rapidement.

(Petit Appartait, stocker le mot de passe en session pour éviter les saisies multiples est dangereux, en effet un hacker déjà en possession d'un accès au serveur, pourra lire les données de tout les utilisateurs actuellement connecté, donc avoir le password, donc décrypter ou falcifier leurs données)

En revanche, sans ce dit password, tu ne peux retrouver l'information initial. Comment faire pour que Bob et Alice puisse partager leurs informations ?

Une solution parmis d'autres :
Le partage de clé ! tu génères des clés par document, ainsi toute personnes aillant l'accès auront cette clé, mais celle ci est copié pour chaques personnes aillant l'accès, mais chiffré avec son password personnel.

Tu auras donc N copy de la clé, N étant le nombre d'utilisateur aillant accès à cette information.

Un problème majeur a cette solution est que tu ne peux "chiffrer la clé" sans connaitre le password de l'utilisateur, le système doit donc attendre la prochaine connection (ou saisie de password) pour faire ce traitement, et garder la clé en claire en attendant. risqué...

Avec cet exemple j'essaye de montrer que toutes solutions à ces forces et ces faiblesses, qu'une solution parfaite n'existe pas. Qu'il faut faire des compromis et surotut être concient de tes faiblesses pour au mieux, les supprimer, au pire les minimiser et surveiller.