Hello à tous j'espère ne pas être redondant.
Mon programme utilise une base sqlite, j'aimerai vos avis donc pour protéger efficacement la base sqlite y compris des plugins interne.
actuellement j'ai donc une bibliothèque de classes , passerelle qui sert donc pour le programme et aussi les plugins... Ma crainte c'est qu'un mec ponde un jour un plugin malveillant, et que des utilisateurs de mon programme ne le chargent sans regarder ce qu'il contient. (Sous réserve que mon programme soit adopté en même temps mais bon soyons fou et imaginons que ça plaise). Avec ou sans cette bibliothèque pour les plugins il pourrait accéder de toute manière à la base je pense, suffit d'intégrer le nécessaire pour gérer les bases sqlite, et de connaitre le lien vers la base utilisée qui n'a rien d'un secret.
Donc j'ai un peu regarder on parle d'encrypter la base, c'est une idée, je me dis donc par contre que la seule manière d'empêcher aussi l'accès depuis le plugin tiers sera donc de faire en sorte de ne jamais proposer les fonctions de connexion de déconnexion à la base, donc de les inclure à chaque requête. Si je reste avec une connexion permanente, puisque le moteur ne gère apparemment pas de droits d'accès c'est mort. Je comptais à la base faire une connexion, exécuter plusieurs requêtes et fermer ensuite... je me dis que du coup ça sera pas possible. En outre je me dis qu'avec ce système, je vais donc décrypter la base, connecter, faire la requête, déconnecter, réencrypter... ça peut être lourd dans l'ensemble, qu'en pensez vous ?
Du coup en base de donnée embarquée je vois pas vraiment comment faire autrement, est ce que je me fais du soucis pour rien, est ce que l'utilisateur est sensé savoir ce qu'il fait et me dédouaner du reste (les plugins tiers seraient postés sur un site avec obligation de publier la source, pour non seulement vérifier, mais aussi que les gens qui dl aient accès pour vérifier par eux mêmes s'ils le souhaitent) . J'ai pensé stocker le nom des tables à part mais au final suffit d'ouvrir la base sqlite avec un programme qui prend les bases sqlite pour connaitre le nom, donc pas vraiment utile et je ne vois pas comment bloquer le créateur d'un plugin pour qu'il n'ait pas d'autre choix que de passer par les instructions maison, qui elles, empêchent par exemple de vider totalement une table.
edit: j'ai eu une idée en tapant....
Fonction de décryptage et cryptage utilisable dans mon programme, lancer ensuite ma série de requête qui ne seraient pas affectées par ça donc comme je souhaitais le faire initialement... par contre ne laisser à disposition que des fonctions qui utiliseraient mes fonctions mais avec un "wrapping" de décryptage+connexion [requête] deconnexion+cryptage. Ca ne ralentira significativement donc que les accès par les plugins et non le programme principal.
Par contre si je ne m'abuse ça signifie d'avoir au moins deux méthodes en copier coller, je ne vois pas comment faire une fonction connexion() dans la bibliothèque de classe qui ne soit accessible que depuis mon programme principal, et pas par les plugins. Et si je la fais dans mon programme principal je ne pourrais pas l'utiliser dans la bibliothèque de classe sans faire un "circular dependency" si je ne m'abuse.
Partager