Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 20/07/2009, à 12:20

haile_selassie

[java] Protéger une applet

Salut.
Voilà, à peu près tout est dans le titre : j'utilise une applet qui se connecte à une base de données. Elle contient donc les informations de connexion à la base de données.
Alors j'aimerais éviter que le premier venu puisse décompiler les classes de l'applet pour y trouver ces informations.
J'ai fait des recherches, j'ai trouvé que les "Obfuscator" sont normalement destinés à protéger un code source. Mais apparemment, ça rend surtout l'algorithme plus difficile à lire, d'après ce que j'ai compris. Et puis, je n'ai réussi à en faire fonctionner qu'un sur tous ceux que j'ai testés, et quand j'ai décompilé, c'était exactement le même code ^^
Alors est-ce qu'il existe un moyen de rendre très difficile la décompilation d'un code java ? Ou au pire, de protéger les informations de connexion à ma base de données. Les algorithmes, je m'en fiche un peu de le protéger.
Merci.

Hors ligne

#2 Le 20/07/2009, à 13:02

alexduf

Re : [java] Protéger une applet

Bonjour,

Tu peux toujours crypter ton mot de passe à l'aide par exemple d'un cryptage symétrique. Le truc, c'est que quelqu'un qui est en mesure de décompiler une classe sera en mesure de comprendre que tu as effectué un cryptage, et en mesure de le décrypter...

Si tu ne veux pas exposer ta base, il faut voir les chose différemment : ton applet ne devrait pas y accéder directement mais via une couche de service (Webservice, EJB ou que sais-je).
Ce qui n'empêchera pas un inconnu d'aller consulter la base, mais te laissera un plus grand contrôle sur tes données. (et évitera toutes les opérations type grant etc...)
C'est lourd à développer, et le jeu n'en vaut peut-être pas la chandelle. Finalement si le user qui accède à la base est bien configuré, tu ne devais pas trop t'inquiéter.

Hors ligne

#3 Le 20/07/2009, à 13:36

haile_selassie

Re : [java] Protéger une applet

alexduf a écrit :

Ce qui n'empêchera pas un inconnu d'aller consulter la base

Je me disais que justement, en configurant la base pour un accès local seulement, et en faisant un échange servlet/applet, ça se pourrait que la base soit inaccessible depuis une adresse distante, non?
Ce qui m'embête, c'est que ça m'empêcherait de pouvoir gérer ma base d'où je veux, sauf en passant par ssh.

alexduf a écrit :

C'est lourd à développer, et le jeu n'en vaut peut-être pas la chandelle.

Tout le problème est là: il s'agit d'une petite applet, et ça m'embête de devoir coder un truc lourd pour la faire tourner.
J'avais pensé à utiliser le php pour faire la requête et passer les identifiants de la base en paramètres à l'applet, mais c'est con, vu que ça va les écrire en dur dans le code html ^^
C'est vrai que je pourrais utiliser un cryptage symétrique, mais je ne vois pas bien comment procéder, puisqu'à un moment, il faudrait que la clé soit écrite quelque part. Et comme tu le dis, une fois les classes décompilées, on voit bien qu'il y a utilisation d'un cryptage ^^

Je pense que ce que je vais faire, c'est restreindre les droits sql des utilisateurs. C'est ce que tu dois entendre par "Finalement si le user qui accède à la base est bien configuré, tu ne devais pas trop t'inquiéter."

Merci smile

Hors ligne

#4 Le 20/07/2009, à 13:47

®om

Re : [java] Protéger une applet

Ton applet (du type client lourd) ne doit en aucun cas se connecter directement à la base de données, quelque soit l'obfuscation ou chiffrement que tu mets en place, quelqu'un qui analyse ton applet saura se connecter à la base (le chiffrement ici ne sert à rien, car l'applet doit bien le déchiffrer un moment ou à un autre, et comme c'est fait côté client...).

Il faut que ton applet communique avec une servlet ou autre, et c'est la servlet qui fait les requêtes.

Hors ligne

#5 Le 20/07/2009, à 14:02

haile_selassie

Re : [java] Protéger une applet

Oui, c'est bien ce que je me disais.
Je vais potasser ça, je ne connais pas bien les méthodes de communication applet/servlet. Mais ça n'a pas l'air très compliqué.
Merci smile

Hors ligne

#6 Le 20/07/2009, à 14:05

alexduf

Re : [java] Protéger une applet

®om a écrit :

Ton applet (du type client lourd) ne doit en aucun cas se connecter directement à la base de données,

n'exagérons rien, il ne s'agit pas de données bancaires ^_^.
Enfin j'espère !

haile_selassie a écrit :

Oui, c'est bien ce que je me disais.
Je vais potasser ça, je ne connais pas bien les méthodes de communication applet/servlet. Mais ça n'a pas l'air très compliqué.

Ben tu peux le faire à l'ancienne avec une servlet comme le suggère Rom, ou en utilisant des EJB, ou des webservices (qui ne sont rien d'autres que des servlet déguisées).
Ca suggère quand même d'avoir un process Java qui tourne coté serveur.

Dernière modification par alexduf (Le 20/07/2009, à 14:08)

Hors ligne

#7 Le 20/07/2009, à 14:23

haile_selassie

Re : [java] Protéger une applet

alexduf a écrit :

Ben tu peux le faire à l'ancienne avec une servlet comme le suggère Rom, ou en utilisant des EJB, ou des webservices (qui ne sont rien d'autres que des servlet déguisées).
Ca suggère quand même d'avoir un process Java qui tourne coté serveur.

Ouaip. Même si ce ne sont pas des données bancaires, je tiens quand même à faire le truc proprement. Qui sait, ça pourrait me reservir si je bosse pour une banque tongue
Je tenterai ça.

Hors ligne

#8 Le 20/07/2009, à 14:26

®om

Re : [java] Protéger une applet

alexduf a écrit :
®om a écrit :

Ton applet (du type client lourd) ne doit en aucun cas se connecter directement à la base de données,

n'exagérons rien, il ne s'agit pas de données bancaires ^_^.
Enfin j'espère !^

Non mais avec un accès direct à la base, c'est plus facile de pirater le serveur.

Hors ligne

#9 Le 20/07/2009, à 14:33

haile_selassie

Re : [java] Protéger une applet

En mysql je peux autoriser un utilisateur à faire des requêtes seulement sur certaines tables, et ensuite lui autoriser seulement certains types de requêtes non?
Si c'est possible, est ce que le fait d'avoir des accès aussi restreints facilite le piratage?
Mais de toute façon, même si c'est possible de restreindre autant les droits, il est mieux de savoir que l'utilisateur n'aura jamais d'accès direct à la base.

Hors ligne

#10 Le 20/07/2009, à 16:05

alexduf

Re : [java] Protéger une applet

haile_selassie a écrit :

En mysql je peux autoriser un utilisateur à faire des requêtes seulement sur certaines tables, et ensuite lui autoriser seulement certains types de requêtes non?

oui

grant select on mabase.matable to 'monuser'
haile_selassie a écrit :

Si c'est possible, est ce que le fait d'avoir des accès aussi restreints facilite le piratage?

Ca complique les choses par rapport à un user qui aurait tous les droits, mais globalement la sécurité de la machine dépend du coup des éventuelles failles mysql.

haile_selassie a écrit :

Mais de toute façon, même si c'est possible de restreindre autant les droits, il est mieux de savoir que l'utilisateur n'aura jamais d'accès direct à la base.

C'est bien résumé. Tout dépend du temps que tu veux passer à développer ton application.

Hors ligne

#11 Le 21/07/2009, à 00:46

haile_selassie

Re : [java] Protéger une applet

En fait, j'ai résolu le problème en faisant le truc en php, j'ai appris quelques bases en php par la meme occasion, vu que je ne connaissais pas le langage ^^.
D'ailleurs, j'ai un problème, je vais le poster.

Hors ligne